为了账号安全,请及时绑定邮箱和手机立即绑定

HTML编码问题-出现“字符而不是” ;“

HTML编码问题-出现“字符而不是” ;“

慕姐4208626 2019-07-08 16:48:30
HTML编码问题-出现“字符而不是” ;“我有一个遗留的应用程序刚刚开始不正常行为,无论什么原因,我不确定。它生成一组HTML,由ActivePDF将其转化为PDF报告。这个过程是这样的:从含有待替换标记的DB中提取HTML模板(例如“~CompanyName~”、“~CustomerName~”等)用实际数据替换令牌用一个简单的regex函数整理HTML,该函数属性格式化HTML标记属性值(确保引号等,因为ActivePDF的呈现引擎讨厌属性值周围的单引号)将HTML发送到创建PDF的Web服务。在这个混乱的地方,HTML模板中的不间断空间( s)编码为ISO-8859-1,因此在浏览器(Firefox)中查看文档时,它们会错误地显示为“字符。ActivePDF会吐出这些非UTF 8字符。我的问题是:既然我不知道问题出在哪里,也没有时间去调查它,那么是否有一种简单的方法来重新编码或者找到并替换坏角色呢?我试过通过这个小功能把它发送出去,但是把这一切都变成了狼吞虎咽不会改变什么。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
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

在这种混乱的地方,HTML模板中的不间断空格编码为iso-8859-1,因此它们被错误地显示为“字符。

那就是编码到UTF-8,而不是ISO-8859-1。在iso-8859-1中,不中断的空格字符是字节0xA0;当编码到utf-8时,它将是0xC2,0xA0,如果(不正确地)将其视为ISO-8859-1,则如下所示:" "..这包括一个可能没有注意到的跟踪nbsp;如果这个字节不存在,那么您的文档中就会有其他东西损坏,我们需要进一步查看以找出具体内容。

什么是regexp,模板是如何工作的?如果您的 字符串被(正确地)转换为U+00A0非破缺空格字符。如果是这样的话,您可以在DOM中本机处理模板,并要求它使用ASCII编码序列化,以保持非ASCII字符作为字符引用。这也将使您不必对HTML本身进行regex后处理,因为HTML本身一直是一项非常不可靠的业务。

无论如何,现在您可以在文档中添加以下内容之一<head>看看这是否使它在浏览器中看起来正确:

  • 对于HTML 4:

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

  • 对于HTML 5:

    <meta charset="utf-8">

如果您已经这样做了,那么剩下的任何问题都是ActivePDF的错。


查看完整回答
反对 回复 2019-07-08
?
手掌心

TA贡献1942条经验 获得超3个赞

如果有人和我有同样的问题,而且字符集已经是正确的,那么只需这样做:

  1. 复制.html文件中的所有代码。
  2. 打开记事本(或任何基本文本编辑器)并粘贴代码。
  3. 去“文件->保存为”
  4. 输入文件名“example.html”(选择“另存为类型:所有文件”(

    .)")

  5. 选择编码作为UTF-8
  6. 点击Save,您现在可以删除旧的.html文件,编码应该是固定的


查看完整回答
反对 回复 2019-07-08
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

问题:就连我都面临着我们送去的问题“GB”在POST请求中有一些字符串到crm系统,但是当我们从crm进行get调用时,它会返回。‘GB’有一些字符串内容。所以我们分析的是“GB”被转换成‘GB’.

分析:我们在做研究后发现的问题是,在POST Call中,我们设置了HttpWebRequest内容类型为“text/xml”在打电话的时候“text/xml;charset:utf-8”.

解决办法:因此,作为解决方案的一部分,我们包括了字符集:utf-8在邮政请求和它的工作。


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 389 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信