【发布时间】:2016-07-21 12:34:07
【问题描述】:
所以我正在自学字符编码,我有一个大概很愚蠢的问题:Wikipedia 说
字节顺序标记(BOM)是一个Unicode字符,U+FEFF BYTE ORDER 马克(BOM),...
,并且该页面上的图表显示
Encoding Representation (hexadecimal)
UTF-8 EF BB BF
UTF-16 (BE) FE FF
UTF-16 (LE) FF FE
...
我对此有点困惑。据我所知,大多数使用 Intel CPU 的机器都是 little-endian,那么为什么 BOM 是 UTF-16 (BE) 的 U+FE FF,而不是 UTF-8 的 U+EF BB BF 或 UTF-16 (LE) 的 U+FF FE?
【问题讨论】:
-
好吧,因为 U+FEFF 是一个字符,而 U+FFEF 不是。零宽度空间有一个很好的属性,即即使应用程序没有正确过滤它或通过在文本流中间插入 BOM 来混淆,它也不会影响呈现的文本。非常常见的错误。
-
关于你的“UTF-8 而不是 U+EF BB BF”:很有趣,因为 UTF8 不需要“字节顺序标记”。 UTF8 编码文本中的所有值都应该正好是 1 个字节长,因此出错的可能性为零。
-
@RadLexus 所以 UTF-8 不需要 BOM 来指示字节顺序,而 UTF-16 和 UTF-32 则需要?
-
是的。 wikipedia 上有一篇相当长的文章讨论所有品种。
标签: unicode utf-8 character-encoding