У меня есть устаревшее приложение, которое только начинает плохо себя вести, по какой-то причине я не уверен. Он генерирует кучу HTML, который ActivePDF превращает в отчеты PDF.
Процесс работает так:
- Извлеките шаблон HTML из БД с токенами в нем для замены (например, "~ CompanyName ~", "~ CustomerName ~" и т. Д.)
- Замените токены реальными данными
- Приведите в порядок HTML с помощью простой функции регулярного выражения, которая свойство форматирует значения атрибутов тега HTML (обеспечивает кавычки и т. Д., Поскольку механизм визуализации ActivePDF ненавидит все, кроме одинарных кавычек вокруг значений атрибута)
- Отправьте HTML в веб-службу, которая создает PDF.
Где-то в этом беспорядке неразрывные пробелы из шаблона (
ов) HTML кодируются как ISO-8859-1, поэтому они неправильно отображаются в виде символа «Â» при просмотре документа в браузере (FireFox). ActivePDF рвёт этих не-UTF8 персонажей.
Мой вопрос: так как я не знаю, откуда возникла проблема, и у меня нет времени ее исследовать, есть ли простой способ перекодировать или найти и заменить плохие символы? Я пытался отправить его через эту маленькую функцию, которую я бросил вместе, но она превращает все это в болванку и ничего не меняет.
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
Любые идеи?
РЕДАКТИРОВАТЬ:
Я пока с этим справляюсь, хотя вряд ли это кажется хорошим решением:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function