5

我正在(重新)阅读Joel 关于 Unicode 的精彩文章,遇到了这一段,我不太明白:

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

为什么会有一个问号,他所说的“或者,如果你真的很好,一个盒子”是什么意思?他想表现什么性格?

4

4 回答 4

5

有一个问号是因为编码过程识别到编码不能支持该字符,并用问号代替。“如果你真的很棒,”他的意思是,“如果你有更新的浏览器和适当的字体支持”,你会得到一个更漂亮的替换字符,一个盒子。

在 Joel 的例子中,他并没有试图显示一个真实的字符,他实际上包括了 Unicode 替换字符U+FFFD REPLACEMENT CHARACTER

于 2012-07-11T02:16:18.610 回答
2

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

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

所以“�”并不是真正的“未知字符”,更不是“无法显示的字符”。相反,它的意思是“不是一个角色”。

于 2012-07-11T04:43:19.637 回答
1

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

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

于 2012-07-12T01:56:01.800 回答
0

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

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

于 2012-07-11T02:18:09.343 回答