当前位置: 首页 > 面试题库 >

HTML编码问题-显示“”字符而不是“”

诸葛皓
2023-03-14
问题内容

由于不确定的原因,我有一个旧版应用程序开始表现异常。它生成一堆HTML,由ActivePDF转换为PDF报告。

该过程如下所示:

  1. 从数据库中提取带有替换标记的HTML模板(例如,“〜CompanyName〜”,“〜CustomerName〜”等)
  2. 用真实数据替换令牌
  3. 使用简单的正则表达式函数对HTML进行整理,该函数可对HTML标签属性值进行格式设置(确保引号等,因为ActivePDF的呈现引擎讨厌除属性值周围的单引号之外的所有内容)
  4. 将HTML发送到创建PDF的Web服务。

在混乱的某个地方,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

有任何想法吗?

编辑:

我现在暂时解决了这个问题,尽管这似乎不是一个好的解决方案:

Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
    Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function

问题答案:

在混乱的某个地方,HTML模板(s)中的不间断空格被编码为ISO-8859-1,因此它们错误地显示为“”字符

那将被编码为UTF-8,而不是ISO-8859-1。不间断空格字符是ISO-8859-1中的字节0xA0;当编码为UTF-8时,它将为0xC2,0xA0,如果(错误地)将其视为ISO-8859-1,则显示为"Â "。其中包括您可能不会注意到的结尾nbsp。如果该字节不存在,则说明您的文档有其他缺陷,我们需要进一步查看以找出问题所在。

什么是正则表达式,模板如何工作?如果将您的 字符串(正确)转换为U + 00A0 NON-BREAKING
SPACE字符,则似乎在某个地方包含了适当的HTML解析器。如果是这样,您可以只在DOM中本地处理模板,并要求它使用ASCII编码进行序列化以保留非ASCII字符作为字符引用。这也将使您不必再对HTML本身进行正则表达式后处理,而HTML本身一直是一项高度狡猾的业务。

好吧,无论如何,现在您可以将以下内容之一添加到文档中<head>,看看它是否可以在浏览器中正确显示:

  • 对于HTML4: <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  • 对于HTML5: <meta charset="utf-8">

如果您这样做了,那么剩下的问题就是ActivePDF的问题。



 类似资料:
  • 问题内容: 我在win7(x64)上安装了标准XAMPP。在过去的项目中遇到了编码方面的麻烦,其中mysql编码与php enconding不匹配,而php enconding有时又以其他编码形式输出html,因此,我决定始终使用utf-8对所有内容进行编码。 我刚刚开始使用html标记,并且已经遇到了麻烦。 我的页面是使用utf-8保存的( 我认为 没有BOM ) // update:事实并非如

  • 如果有人知道是怎么回事,请帮忙。我已经尝试了我在互联网上找到的所有东西,但到目前为止都无济于事。出于某种原因,在idea中启动项目时,页面上显示的是问号而不是俄语字母 我已经尝试过: > 我确保windows控制台以866响应chcp请求,我读到最好设置此值 同样在区域标准设置中,在选项卡中,我还单击了“更改系统语言”按钮,然后取消选中“测试版:使用 Unicode (UTF-8) 支持全球语言”

  • 我发现了一个问题,即数据在控制器中正确编码并编译,但在alert语句中(或页面上)没有正确显示。请看下面的配置。 Tomcat服务器属性 null null null null null null null server.xml配置 我在这里缺少了什么样的简单配置?

  • 问题内容: 我目前正在使用ReactJS和webpack构建一个网站。 我的文本编辑器设置为编码,并且使用带重音或特殊字符的字符,例如。 在我的html页面中,我相信我使用的配置正确: 但是特殊字符的渲染方式不正确: 例如,而不是。 我尝试设置,但没有任何改变。 我觉得webpack正在使用编码构建,这使我的角色停滞不前。我该如何解决这个问题? 问题答案: 我没有找到一种使Webpack读取UTF

  • 我们都知道计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是 65,小写字母 z 的编码是 122。 如果要表示中

  • 我有一个缓冲区与字符编码在Windows 1252。然而,当我用适当的编码创建一个新的字符串时,而不是预期的结果,我经常会得到询问标记,例如。 因此,系统应在其上方显示带“^”的“u”字符。而是显示“?”。 任何想法?