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