什么是异常八位位组订单BOM

时间:2013-08-29 18:42:52

标签: xml endianness byte-order-mark

在XML文档和Mozilla通用字符集检测器(UCSD)的不同实现上,出现了一个BOM序列,其中字节顺序或字顺序是相反的,但不是两者都有,他们称之为“不寻常”八位字节顺序':

XML docs

F.1 Detection Without External Encoding Information
...
00 00 FF FE     UCS-4, unusual octet order (2143)
FE FF 00 00     UCS-4, unusual octet order (3412)

Universal Character Set Detector (UCSD) source(仅举例):

  if (('\xFF' == aBuf[1]) && ('\x00' == aBuf[2]) && ('\x00' == aBuf[3]))
    // FE FF 00 00 UCS-4, unusual octet order BOM (3412)
    mDetectedCharset = "X-ISO-10646-UCS-4-3412";

  else if (('\x00' == aBuf[1]) && ('\xFF' == aBuf[2]) && ('\xFE' == aBuf[3]))
    // 00 00 FF FE UCS-4, unusual octet order BOM (2143)
    mDetectedCharset = "X-ISO-10646-UCS-4-2143";

Universal Character Set Detector (UCSD) docs

Known character sets
...
X-ISO-10646-UCS-4-2143
X-ISO-10646-UCS-4-3412

是否存在使用此字节序的任何硬件,是否存在这样的编码 或者它的ISO标准,有没有支持编码/解码的流行的lib? 为什么这些序列不会像其他无效序列一样被忽略?

1 个答案:

答案 0 :(得分:1)

ISO 10646和Unicode仅包括big-endian和little-endian UCS-4 / UTF-32,而不是中端。据我所知,现有的软件都没有使用这些编码,它们实际上是无关紧要的。为什么XML标准会提到它呢?我不知道,但我想提到它是出于对理论完整性的渴望,而不是任何实际价值;同样可能适用于包括对它的支持的字符检测/转换软件。

历史上,有一些系统使用了中端字节顺序; PDP-11使用3412格式存储32位数字。因此,如果您尝试在PDP-11上处理UCS-4 / UTF-32,则UCS-4-3412格式可能很有用。但实际上,没有人试图这样做,因为在Unicode到来之前PDP-11已经过了鼎盛时期;由于PDP-11只是16位机器,因此UCS-4并不是最好的Unicode格式。