Mam starszą aplikację, która zaczyna się źle zachowywać, z jakiegokolwiek powodu nie jestem pewien. Generuje wiązkę HTML, która jest przekształcana w raporty PDF przez ActivePDF.
Proces działa w następujący sposób:
- Wyciągnij szablon HTML z bazy danych z tokenami do zastąpienia (np. „~ CompanyName ~”, „~ CustomerName ~” itp.)
- Zamień tokeny na prawdziwe dane
- Uporządkuj HTML za pomocą prostej funkcji regex, która właściwość formatuje wartości atrybutów znaczników HTML (zapewnia znaki cudzysłowu itp., Ponieważ silnik renderujący ActivePDF nienawidzi niczego oprócz pojedynczych cudzysłowów wokół wartości atrybutów)
- Wyślij kod HTML do serwisu internetowego, który tworzy plik PDF.
Gdzieś w tym bałaganie nieprzerwane spacje z szablonu (
ów) HTML są kodowane jako ISO-8859-1, dzięki czemu wyświetlają się niepoprawnie jako znak „” podczas przeglądania dokumentu w przeglądarce (FireFox). ActivePDF rzyga na te znaki spoza UTF8.
Moje pytanie: skoro nie wiem, skąd bierze się problem i nie mam czasu na jego zbadanie, czy istnieje prosty sposób na ponowne zakodowanie lub znalezienie i zastąpienie złych znaków? Próbowałem wysłać to przez tę małą funkcję, którą razem zrzuciłem, ale zamienia to wszystko w gobbledegook niczego nie zmienia.
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
Jakieś pomysły?
EDYTOWAĆ:
Na razie sobie z tym radzę, choć nie wydaje się to dobrym rozwiązaniem:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function