我决定为自己编写一个用于Unicode参考的小脚本,因为我最喜欢的在线Unicode查找网站已变得越来越多并且充满了广告。到目前为止,这是一个令人愉快的项目。但是,我注意到某些字符显示不正确。
例如,代码点Ux8E应该是一个名为“SINGLE SHIFT TWO”的控制字符 - 实际上这是显示的名称,但字符本身显示为Ž - 这是应该在Ux17D的字符,“LATIN带有卡隆的大写字母Z“。它也是x8E上的CP1252字符,因此必须是混淆源的线索。
为什么我的浏览器会在CP1252编码中生成并显示字符,如何阻止它?目前,该脚本在我的Mac上本地运行 - 它是JavaScript,主要是jQuery,在HTML 5中:字符本身表示为,例如, “&安培; x8e;”并使用jQuery append()插入。脚本本身以UTF-8编码,HTML在元中指定UTF-8。这是一个Apache问题吗?操作系统问题?我没有进行过广泛的浏览器测试,但在Safari,Firefox,Opera和Chrome中也是如此,所以我猜不是这样。
我可以简单地删除所有控制字符,因为它们无论如何都不打算显示。我目前正在从包含所有Unicode字符信息的XML文件中将字符名称写入页面,所以当我这样做时,我可以检查字符是否是控制字符并相应地删除它。但是XML非常庞大而且Ajax的速度很慢,以至于让它成为一个快速参考的混乱,所以我真的很想找到一种方法来强迫我的电脑不要首先向我展示垃圾。
有什么想法吗?
答案 0 :(得分:0)
这是有缺陷的网站解决方法。
例如:项目符号•
(U + 2022)在几个单字节字符集中编码为字节 0x95 ,如Windows-1252。因此,有些人会通过编写•
在其网页中加入子弹。如果该浏览器使用相同的编码,可能会使用该文件。
通常•
确实编码一个控制字符。但由于这些控制字符通常不在网页中使用,即使现代浏览器也假设此实体引用了windows-1252中的编码值并显示了一个项目符号。 (子弹的正确数字实体是•
)
这些天你通常会指定页面的编码(通常是utf-8),并且只是在HTML页面中写下项目符号字符。
这也是阻止此行为的方法。只需使用字符(例如,使用$element.text("•")
)并且不使用数字实体。