【问题标题】:Unicode entities displayed as CP1252Unicode 实体显示为 CP1252
【发布时间】:2015-12-14 10:58:52
【问题描述】:

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

例如,代码点 Ux8E 应该是一个名为“SINGLE SHIFT TWO”的控制字符 - 实际上这是显示的名称,但字符本身显示为 Ž - 这应该是 Ux17D 的字符,“LATIN带有 CARON 的大写字母 Z"。这也是 x8E 中的 CP1252 字符,所以这一定是混淆根源的线索。

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

我可以简单地删除所有控制字符,因为它们无论如何都不会显示。我目前正在将字符名称从包含所有 Unicode 字符信息的 XML 文件中添加到页面中,因此当我这样做时,我可以检查字符是否是控制字符并相应地删除它。但是 XML 很大,而 Ajax 的速度很慢,作为快速参考会让人感到困惑,所以我真的很想找到一种方法,让我的计算机一开始就不要向我显示垃圾。

有什么想法吗?

【问题讨论】:

    标签: jquery unicode html-entities cp1252


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢你 - 这听起来正是我遇到的问题。我将尝试逐字输出字符,看看会发生什么!
    • 因为我是动态生成表格的,所以我不能使用字符串文字,所以我使用了 String.fromCodePoint() 并且效果很好。
    猜你喜欢
    • 2014-01-27
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 2017-12-13
    • 2015-03-07
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多