字节顺序标记
维基百科,自由的 encyclopedia
字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF
的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的标记。
字节顺序标记通常有几种涵义[1]:
字节顺序标记的使用是选择性的。它的存在会干扰那些不希望文件开头出现非ASCII字符、但可以用其他方式处理文字流的软件对于UTF-8的使用。
Unicode可以以8位、16位或32位整数为单位进行编码。对于16位和32位的表示方法,从任意来源接收文本的电脑需要知道整数是以何种字节顺序编码的。字节顺序标记的编码方式与文档文件的其他部分相同,如果它的字节被调换,就会变成一个非字符的Unicode码位。因此,访问文本的过程中,可以透过检查这头几个字节来确定字节顺序,而不需要文字流本身以外的一些约定或元数据。一般来说,如果有必要,接收资料的电脑会将字节换成自己的字节顺序,不再需要字节顺序标记进行处理。
每个Unicode编码(包括Unicode标准以外的编码,如UTF-7,见下表)的BOM字节序列都不一样,而且这些序列都不可能出现在以其他编码存储的文字流的开头。因此,在文字流的开头放置一个编码的BOM,可以表明文本是Unicode,并识别所使用的编码方案。这种对BOM字符的使用被称为“Unicode签名”[2]。