Mam starszą aplikację, która zaczyna się źle zachowywać, z jakiegokolwiek powodu nie jestem pewien. Generuje pakiet HTML, który zostaje przekształcony w raporty PDF przez ActivePDF.Problemy z kodowaniem HTML - pojawia się znak "Â" zamiast " "
Proces działa tak:
- Pull szablon HTML z DB z tokenów w nim zostać wymienione (np "~ NazwaFirmy ~" "~ CustomerName ~", itd.)
- wymienić żetony z prawdziwymi danymi
- Tidy HTML z prostej funkcji regex że tag formaty własności HTML wartości (zapewnia cudzysłów, itp, ponieważ silnik renderowania activePDF za znosi niczego, ale pojedyncze cudzysłowy wokół wartości atrybutów)
- wysyłaj przypisują HTML do usługi WWW, która tworzy PDF.
gdzieś w tym bałaganie, że non-breaking przestrzenie z szablonu HTML (te
ów) kodującego jako ISO-8859-1, tak aby pokazać się niepoprawnie jako znak „A” podczas wyświetlania dokumentu w przeglądarka (FireFox). ActivePDF pukes na tych znaków spoza UTF8.
Moje pytanie: skoro nie wiem, skąd bierze się ten problem i nie mam czasu na jego zbadanie, czy istnieje łatwy sposób ponownego kodowania lub znajdowania i zastępowania złych znaków? Próbowałem wysłać go przez tę małą funkcję, którą zrzuciłem razem, ale to
zamienia to wszystko w gobbledegook
nic 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
Wszelkie pomysły?
EDIT:
Dostaję przez z tym teraz, choć nie wydaje się dobrym rozwiązanie:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function
Czy kod HTML zawiera metainformacje opisujące jego zestaw znaków? –
[Wcześniejsze skomentowane usunięte] Krótka odpowiedź: nie. –
Dla mnie działało: utf8_decode() – ursuleacv