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