显示为 CP1252 的 Unicode 实体

Unicode entities displayed as CP1252

我决定为自己编写一个 Unicode 参考小脚本,因为我最喜欢的在线 Unicode 查询站点已经出现错误并且充满了广告。到目前为止,这是一个令人愉快的项目。但是,我注意到有些字符显示不正确。

例如,代码点 Ux8E 应该是一个名为 "SINGLE SHIFT TWO" 的控制字符 - 实际上这是显示的名称,但字符本身显示为 Ž - 这就是应该位于 Ux17D 的字符, "LATIN CAPITAL LETTER Z WITH CARON"。它也是 x8E 中的 CP1252 字符,所以这一定是混淆根源的线索。

为什么我的浏览器生成并显示 CP1252 编码的字符,我该如何阻止它?目前脚本在我的 Mac 本地 运行 - 它是 JavaScript,主要是 jQuery,在 HTML 5:字符本身表示为,例如“&x8e;”并使用 jQuery append() 插入。脚本本身以 UTF-8 编码,HTML 在 meta 中指定 UTF-8。是 Apache 的问题吗? OS 问题?我没有做过广泛的浏览器测试,但在 Safari、Firefox、Opera 和 Chrome 中都是一样的,所以我想不是那样。

我可以简单地删除所有控制字符,因为它们无论如何都不会显示。我目前正在将包含所有 Unicode 字符信息的 XML 文件中的字符名称 ajax 到页面中,因此当我这样做时,我可以检查字符是否是控制字符并相应地删除它。但是 XML 很大,而 Ajax 慢到足以让它作为快速参考变得混乱,所以我真的很想找到一种方法来强制我的计算机不向我显示垃圾第一名.

有什么想法吗?

这是一个有问题的网站解决方法。

例如:子弹(U+2022)在一些单字节字符集中编码为字节0x95,如Windows- 1252.因此,有些人会通过编写 • 在他们的网页中包含一个项目符号。如果该浏览器使用相同的编码,这大概可以工作。

通常•确实编码了一个控制字符。但由于网页中通常不使用这些控制字符,因此即使是现代浏览器也假定此实体指的是 windows-1252 中的编码值并显示项目符号。 (子弹的正确数字实体是 •

如今,您通常会指定页面的编码(通常是 utf-8),然后直接在 HTML 页面中写下项目符号字符。

这也是阻止这种行为的方法。只使用字符(例如,使用 $element.text("•")),不要使用数字实体。