Tengo una aplicación heredada que empieza a portarse mal, por alguna razón no estoy seguro. Genera un montón de HTML que se convierte en informes PDF por ActivePDF.Problemas de codificación HTML - aparece el carácter "Â" en lugar de " "
El proceso es el siguiente:
- Tire una plantilla HTML a partir de una base de datos con fichas en ella para ser reemplazado (por ejemplo, "~ ~ NombreCompañía", "~ ~ CustomerName", etc.)
- Vuelva a colocar las fichas con datos reales
- ordenado el HTML con una simple función de expresiones regulares esa etiqueta formatos de propiedad HTML valores de atributos (asegura comillas, etc, ya motor de renderizado de ActivePDF odia cualquier cosa menos comillas simples alrededor de valores de atributos)
- enviamos de las HTML a un servicio web que crea el PDF.
En algún lugar de ese desastre, los espacios de no separación de la plantilla HTML (los
s) se codifica como ISO-8859-1 para que muestren de manera incorrecta como un carácter "A" cuando se visualiza el documento en un navegador (FireFox). ActivePDF vomita estos caracteres que no son UTF8.
Mi pregunta: dado que no sé de dónde viene el problema y no tengo tiempo para investigarlo, ¿hay alguna manera fácil de volver a codificar o encontrar y reemplazar los caracteres incorrectos? He intentado enviarlo a través de esta pequeña función que lancé junto, pero
lo convierte todo en gobbledegook
no cambia nada.
Private Shared Function ConvertToUTF8(ByVal html As String) As String
Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")
Dim source As Byte() = isoEncoding.GetBytes(html)
Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))
End Function
¿Alguna idea?
EDIT:
que estoy recibiendo por con esto por ahora, a pesar de que casi no parece ser una buena solución:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function
¿El HTML contiene alguna metainformación para describir su juego de caracteres? –
[Comentarios anteriores eliminados] Respuesta corta: no. –
Para mí funcionó: utf8_decode() – ursuleacv