Ho un'app legacy che sta iniziando a comportarsi male, per qualsiasi motivo non ne sono sicuro. Genera un sacco di HTML che viene trasformato in report PDF da ActivePDF.
Il processo funziona in questo modo:
- Estrai un modello HTML da un DB con token da sostituire (ad es. "~ CompanyName ~", "~ CustomerName ~", ecc.)
- Sostituisci i token con dati reali
- Riordina l'HTML con una semplice funzione regex che formatta i valori degli attributi dei tag HTML (garantisce virgolette, ecc., Poiché il motore di rendering di ActivePDF odia qualsiasi cosa tranne le virgolette singole attorno ai valori degli attributi)
- Invia l'HTML a un servizio Web che crea il PDF.
Da qualche parte in quel pasticcio, gli spazi non-break dal template HTML (
s) stanno codificando come ISO-8859-1 in modo da apparire erroneamente come un carattere "Â" quando si visualizza il documento in un browser (FireFox). ActivePDF vomita su questi caratteri non UTF8.
La mia domanda: dal momento che non so da dove provenga il problema e non ho tempo di investigarlo, esiste un modo semplice per ricodificare o trovare e sostituire i personaggi cattivi? Ho provato a inviarlo tramite questa piccola funzione che ho messo insieme, ma lo trasforma in un gobbledegook non cambia nulla.
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
Qualche idea?
MODIFICARE:
Per ora ci sto cavando, anche se non sembra una buona soluzione:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function