Cᴏʀ*_*ᴏʀʏ 197 html vb.net encoding utf-8 iso-8859-1
我有一个遗留应用程序只是开始行为不端,无论出于何种原因我不确定.它会生成一堆HTML,并由ActivePDF转换为PDF报告.
这个过程是这样的:
在那个混乱的地方,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
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:
我现在正在接受这个,虽然它似乎不是一个好的解决方案:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function
Run Code Online (Sandbox Code Playgroud)
bob*_*nce 329
在那个烂摊子的某个地方,HTML模板(s)中的不间断空格编码为ISO-8859-1,因此它们不正确地显示为"Â"字符
那就是编码为UTF-8,而不是ISO-8859-1.非中断空格字符是ISO-8859-1中的字节0xA0; 当编码为UTF-8时,它是0xC2,0xA0,如果您(错误地)将其视为ISO-8859-1,则表示为"Â ".这包括你可能没有注意到的结尾; 如果那个字节不存在,那么其他东西已经破坏了你的文档,我们需要进一步了解你的内容.
什么是正则表达式,模板是如何工作的?如果您的 字符串(正确地)被转换为U + 00A0非破坏空格字符,那么似乎某个地方会涉及到正确的HTML解析器.如果是这样,您可以在DOM中本机处理模板,并要求它使用ASCII编码进行序列化,以将非ASCII字符保留为字符引用.这也将阻止你对HTML本身进行正则表达式后处理,这本身就是一个非常狡猾的业务.
好吧无论如何,现在你可以在文档中添加以下内容之一,<head>看看是否能让它在浏览器中看起来正确:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><meta charset="utf-8">如果你已经这样做了,那么任何剩下的问题都是ActivePDF的错误.
Low*_*Low 24
如果任何人遇到与我相同的问题且charset已经正确,只需执行以下操作:
Him*_*iya 11
问题: 即使我遇到了问题,我们在CRM系统的POST请求中发送了一些带有字符串的'£',但是当我们从CRM进行GET调用时,它返回了带有一些字符串内容的'£'.所以我们分析的是'£'被转换为'£'.
分析: 我们在研究之后发现的故障是在POST调用中我们将HttpWebRequest ContentType设置为"text/xml",而在GET Call中它是"text/xml; charset:utf-8".
解决方案: 作为解决方案的一部分,我们在POST请求中包含了charset:utf-8,它可以工作.