我有一个遗留的应用程序刚刚开始运行不正常,不知什么原因,我不确定.它生成一系列HTML,然后由ActivePDF转换成PDF报告.
过程如下:
- 从数据库中提取一个HTML模板,其中包含要替换的标记(例如"~CompanyName~"、"~CustomerName~"等)
- 用真实数据替换令牌
- 使用一个简单的正则表达式函数整理HTML,该函数属性格式化HTML标记属性值(确保引号等,因为ActivePDF的呈现引擎不喜欢属性值周围的单引号)
- 将HTML发送到创建PDF的web服务.
在混乱中的某个地方,HTML模板中的不间断空格(
)编码为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