Tengo una aplicación heredada que apenas comienza a comportarse mal, por alguna razón no estoy seguro. Genera un montón de HTML que ActivePDF convierte en informes PDF.
El proceso funciona así:
- Extraiga una plantilla HTML de una base de datos con tokens para ser reemplazados (por ejemplo, "~ CompanyName ~", "~ CustomerName ~", etc.)
- Reemplace los tokens con datos reales
- Ordene el HTML con una función de expresión regular simple que formatea los valores de los atributos de la etiqueta HTML (asegura las comillas, etc., ya que el motor de representación de ActivePDF odia todo menos las comillas simples alrededor de los valores de los atributos)
- Envíe el HTML a un servicio web que cree el PDF.
En algún lugar de ese lío, los espacios que no se rompen de la plantilla HTML (
s) se codifican como ISO-8859-1 para que se muestren incorrectamente como un carácter "Â" cuando se ve el documento en un navegador (FireFox). ActivePDF vomita en estos caracteres no UTF8.
Mi pregunta: dado que no sé de dónde surge el problema y no tengo tiempo para investigarlo, ¿hay alguna manera fácil de volver a codificar o buscar y reemplazar los caracteres malos? Intenté enviarlo a través de esta pequeña función que reuní , 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
¿Algunas ideas?
EDITAR:
Me estoy yendo bien con esto por ahora, aunque no parece una buena solución:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function