我有一个遗留的应用程序开始表现不佳,无论出于什么原因,我不确定。它生成了一堆HTML,然后由ActivePDF转换为PDF报告。
这个过程是这样的:
从数据库中提取一个HTML模板,其中包含要替换的标记(例如。“~公司名~”,“~客户名~”,等等) 用真实的数据替换这些标记 使用一个简单的regex函数来整理HTML,属性格式HTML标签属性值(确保引号等,因为ActivePDF的呈现引擎不喜欢属性值周围的单引号) 将HTML发送给创建PDF的web服务。
在这些混乱中,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