为什么问号会出现在网络浏览器中?

时间:2012-07-11 02:12:45

标签: browser unicode utf-8

我正在(重新)阅读Joel's great article on Unicode并看到了这一段,我不太明白:

  

例如,您可以为Hello(U + 0048)编码Unicode字符串   U + 0065 U + 006C U + 006C U + 006F)ASCII或旧的OEM希腊语编码,   或希伯来语ANSI编码,或任何数百种编码   到目前为止已经发明了一个问题:一些字母可能   没出现!如果没有Unicode代码点的等价物   你试图用你想要代表的编码来表示   它,你通常会得到一个小问号:?或者,如果你真的   好,一个盒子。你得到了什么? - >

为什么会有一个问号,他的意思是“或者,如果你真的很好,一个盒子”?他试图展示什么角色?

4 个答案:

答案 0 :(得分:5)

存在问号,因为编码过程识别出编码不支持该字符,而是替换问号。通过“如果你真的很好”,他的意思是,“如果你有一个更新的浏览器和正确的字体支持,”你会得到一个更漂亮的替换字符,一个盒子。

在Joel的案例中,他并没有尝试显示真实角色,他确实包含了Unicode替换字符U+FFFD REPLACEMENT CHARACTER

答案 1 :(得分:2)

这是一个相当混乱的段落,我真的不知道作者试图说什么。无论如何,不​​同的浏览器(和其他程序)有不同的方法来处理字符问题。问号“?”可能出现在正在使用的字体中没有字形的字符的位置,因此它有效地说“我无法显示字符。”浏览器也可以使用一个小矩形,或者一些其他指标,出于同样的目的。

但“ ”符号是REPLACEMENT CHARACTER,通常用于指示数据错误,例如当字符数据已从某些编码转换为Unicode并且它包含一些无法用Unicode表示的字符时。浏览器通常在显示中使用“ ”用于相关目的:在应用的字符编码中指示字符数据格式错误,包含不构成字符的字节。当处理某些编码中的数据时,通常会发生这种情况,就好像它处于某种其他编码中一样。

所以“ ”并不是指“未知的角色”,更不是“无法表现的角色”。相反,它意味着“不是一个角色”。

答案 2 :(得分:1)

当原始数据中的字节序列与数据的字符集不匹配时,会出现问号,因此无法正确解码。如果数据格式错误,数据的字符集在HTTP标头或HTML本身中被明确说明不正确,浏览器在缺少其他信息时错误地猜测字符集,或者用户的浏览器设置覆盖了数据的字符集,则会发生这种情况。不相容的字符集。

当用于显示数据的字体中不存在已解码的字符时,会出现一个框。

答案 3 :(得分:-1)

正如它所说的 - 某些浏览器显示“奇怪的字符”或当前已知字符集之外的字符的问号。这是他们的“嘿,我不知道这是什么”这个角色。获取旧版本的Netscape,粘贴一些使用智能引号的Microsoft Word文本,你就会得到问号。

http://blog.salientdigital.com/2009/06/06/special-characters-showing-up-as-a-question-mark-inside-of-a-black-diamond/有一个不错的解释。