Ich habe eine Legacy-App, die sich gerade schlecht benimmt, aus welchem Grund auch immer ich nicht sicher bin. Es generiert eine Reihe von HTML-Code, der von ActivePDF in PDF-Berichte umgewandelt wird.
Der Prozess funktioniert folgendermaßen:
- Ziehen Sie eine HTML-Vorlage aus einer Datenbank mit darin zu ersetzenden Token (z. B. "~ Firmenname ~", "~ Kundenname ~" usw.).
- Ersetzen Sie die Token durch echte Daten
- Räumen Sie den HTML-Code mit einer einfachen Regex-Funktion auf, mit der die Eigenschaft HTML-Tag-Attributwerte formatiert (stellt Anführungszeichen usw. sicher, da die Rendering-Engine von ActivePDF alles andere als einfache Anführungszeichen um Attributwerte hasst).
- Senden Sie den HTML-Code an einen Webdienst, der die PDF-Datei erstellt.
Irgendwo in diesem Durcheinander werden die nicht unterbrechenden Leerzeichen aus der HTML-Vorlage (den HTML-Vorlagen
) als ISO-8859-1 codiert, sodass sie beim Anzeigen des Dokuments in einem Browser (FireFox) fälschlicherweise als "Â" angezeigt werden. ActivePDF kotzt auf diese Nicht-UTF8-Zeichen.
Meine Frage: Da ich nicht weiß, woher das Problem stammt und keine Zeit habe, es zu untersuchen, gibt es eine einfache Möglichkeit, die fehlerhaften Zeichen neu zu codieren oder zu finden und zu ersetzen? Ich habe versucht, es durch diese kleine Funktion zu senden, die ich zusammengeschmissen habe, aber es verwandelt alles in ein verschlungenes Buch, das nichts ändert.
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
Irgendwelche Ideen?
BEARBEITEN:
Damit komme ich vorerst zurecht, obwohl es kaum eine gute Lösung zu sein scheint:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function