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

当前回答

我也遇到了同样的问题。显然,这只是因为PHP不识别utf-8。

I was tearing my hair out at first when a '£' sign kept showing up as '£', despite it appearing ok in DreamWeaver. Eventually I remembered I had been having problems with links relative to the index file, when the pages, if viewed directly would work with slideshows, but not when used with an include (but that's beside the point. Anyway I wondered if this might be a similar problem, so instead of putting into the page that I was having problems with, I simply put it into the index.php file - problem fixed throughout.

其他回答

原因是PHP不识别utf-8。

在这里你可以检查HTML中的所有特殊字符

http://www.degraeve.com/reference/specialcharacters.php

我也遇到了同样的问题。显然,这只是因为PHP不识别utf-8。

I was tearing my hair out at first when a '£' sign kept showing up as '£', despite it appearing ok in DreamWeaver. Eventually I remembered I had been having problems with links relative to the index file, when the pages, if viewed directly would work with slideshows, but not when used with an include (but that's beside the point. Anyway I wondered if this might be a similar problem, so instead of putting into the page that I was having problems with, I simply put it into the index.php file - problem fixed throughout.

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

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

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

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

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

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

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

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