TransWikia.com

Como puedo convertir los caracteres codificados de una cadena a un string normal con c#

Stack Overflow en español Asked by Richard Víquez Pérez on November 15, 2021

Realmente no se si es UTF8 o que pero estoy recibiendo un json de un servidor que trae caracteres como tildes y cosas por el estilo que quiero convertirlas a texto normal,
algunos de los campos que trae ese json son visión,misión y valores :

 "mision": "<p>Esta es una visión de prueba de SQL SOftware</p>",

    "vision": "<p>Y esta es la visión</p><span style="color:#666666;font-family:arial, sans-serif;font-size:14px;line-height:22px;text-align:justify;background-color:#ffffff;"></span>",

    "valores": "<p>Descripción<br /></p>",

como puedo convertir esos datos con formato extraño a texto normal. Lo intente de esta forma pero no funciono:

  var deco = Encoding.Default.GetBytes(payload);

                    var json = Encoding.UTF8.GetString(deco);

One Answer

.Net framework ofrece System.Net.WebUtility.HtmlDecode y System.Web.HttpUtility.HtmlDecode que puedes utilizar para tu requerimiento.

El resultado de ambos métodos es el mismo y la diferencia más obvia es la disponibilidad en las distintas versiones de .Net, siendo la más notoria que WebUtiliy está disponible para UWP y HttpUtiliy no.

Ten en cuenta la posibilidad de que tengas que aplicar la conversión varias veces porque en tu ejemplo hay casos donde una sola vez no será suficiente.

En el caso del primer string ...visión..., la primera decodificación lo convierte a visión y en la segunda es que obtienes visión

A continuación un segmento del código que utilicé para probar

const string texto = "<p>Esta es una visión de prueba de SQL SOftware</p>";
string decodificado = WebUtility.HtmlDecode(texto);
decodificado = WebUtility.HtmlDecode(decodificado);

A simple vista parece que decodificar 2 veces es suficiente, pero recomiendo hacer pruebas con diferentes cadenas para confirmarlo.

Si después de decodificar, quieres remover los elementos HTML, la respuesta de Ravi Thapliyal (del sitio en ingles) puede ser de utilidad. Allí utiliza una expresión regular para ese fin:

string noHTML = Regex.Replace(decodificado, @"<[^>]+>|&nbsp;", "").Trim();

Answered by Pablo Gutiérrez on November 15, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP