我有一个旧版应用程序刚刚开始行为不端,无论出于何种原因,我都不确定。它会生成一堆 HTML,这些 HTML 会被 ActivePDF 转换为 PDF 报告。
这个过程是这样的:
- 从数据库中提取一个 HTML 模板,其中包含要替换的标记(例如“~CompanyName~”、“~CustomerName~”等)
- 用真实数据替换令牌
- 使用一个简单的正则表达式函数整理 HTML,该函数对 HTML 标记属性值进行属性格式化(确保引号等,因为 ActivePDF 的渲染引擎讨厌除属性值周围的单引号之外的任何内容)
- 将 HTML 发送到创建 PDF 的 Web 服务。
在混乱中的某个地方,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