Saya punya aplikasi warisan yang baru saja mulai berlaku tidak sopan, untuk alasan apa pun saya tidak yakin. Ini menghasilkan banyak HTML yang diubah menjadi laporan PDF oleh ActivePDF.
Prosesnya bekerja seperti ini:
- Tarik templat HTML dari DB dengan token di dalamnya untuk diganti (mis. "~ CompanyName ~", "~ CustomerName ~", dll.)
- Ganti token dengan data nyata
- Rapikan HTML dengan fungsi regex sederhana yang properti memformat nilai atribut tag HTML (memastikan tanda kutip, dll, karena mesin rendering ActivePDF membenci apa pun kecuali tanda kutip tunggal di sekitar nilai atribut)
- Kirim HTML ke layanan web yang membuat PDF.
Di suatu tempat dalam kekacauan itu, ruang tanpa putus dari template HTML (
s) dikodekan sebagai ISO-8859-1 sehingga mereka muncul secara tidak benar sebagai karakter "Â" ketika melihat dokumen di browser (FireFox). ActivePDF muntah pada karakter non-UTF8 ini.
Pertanyaan saya: karena saya tidak tahu dari mana masalah itu berasal dan tidak punya waktu untuk menyelidikinya, apakah ada cara mudah untuk menyandikan ulang atau menemukan dan mengganti karakter yang buruk? Saya sudah mencoba mengirimnya melalui fungsi kecil yang saya lempar bersama, tetapi ternyata semuanya menjadi gobbledegook tidak mengubah apa pun.
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
Ada ide?
EDIT:
Saya bertahan dengan ini untuk saat ini, meskipun sepertinya ini bukan solusi yang baik:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function