我有一个遗留的应用程序开始表现不佳,无论出于什么原因,我不确定。它生成了一堆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

当前回答

问题: 甚至我也面临着这样的问题,我们在POST请求中将'£'与一些字符串发送到CRM系统,但当我们从CRM执行GET调用时,它返回'£'与一些字符串内容。所以我们分析的是“£”被转换为“£”。

分析: 我们在做研究后发现的故障是,在POST调用中,我们已经将HttpWebRequest ContentType设置为“text/xml”,而在GET调用中,它是“text/xml;字符集:utf - 8”。

解决方案: 因此,作为解决方案的一部分,我们在POST请求中包含了字符集:utf-8,它是有效的。

其他回答

如果有人和我有同样的问题,而且字符集已经正确了,那么就简单地这样做:

复制.html文件中的所有代码。 打开记事本(或任何基本的文本编辑器)并粘贴代码。 点击文件->另存为 输入您的文件名“example.html”(选择“另存为类型:所有文件(.)”) 选择编码为UTF-8 点击保存,你现在可以删除你的旧的。html文件,编码应该是固定的

好吧,我在我的几个网站上也有这个问题,我所需要做的就是自定义HTML实体的内容fetler。在那之前,我删除的越多,我得到的就越多,所以只要改变你的HTML fiter或页面的解析功能,它就工作了。这主要是由于大多数cms中的HTML编辑器。他们存储解析数据的方式导致了这个问题(在我的情况下)。也许这对你的情况也有帮助

在我的情况下,这(一个插入)发生在我从visual studio生成的代码中,使用我自己的工具来生成代码。这个问题很容易解决:

在文档中选择单个空格()。你应该可以看到很多单独的空间看起来与其他单独的空间不同,它们没有被选中。选择这些单独的空格——它们负责浏览器中不需要的字符。使用单个空格()查找和替换。完成了。

PS:当你把光标放在一个字符上或在VS2017+中选择它时,更容易看到所有相似的字符;我希望其他ide也有类似的功能

问题: 甚至我也面临着这样的问题,我们在POST请求中将'£'与一些字符串发送到CRM系统,但当我们从CRM执行GET调用时,它返回'£'与一些字符串内容。所以我们分析的是“£”被转换为“£”。

分析: 我们在做研究后发现的故障是,在POST调用中,我们已经将HttpWebRequest ContentType设置为“text/xml”,而在GET调用中,它是“text/xml;字符集:utf - 8”。

解决方案: 因此,作为解决方案的一部分,我们在POST请求中包含了字符集:utf-8,它是有效的。

在我的情况下,我得到了拉丁十字符号而不是nbsp,甚至一个页面被正确编码为UTF-8。以上都没有帮助解决问题,我尝试了所有。

最后,改变IE的字体(使用浏览器特定的css)有所帮助,我使用Helvetica-Nue作为主体字体更改为Arial解决了这个问题。