BOM
BOM - Byte Order Mark。对于Unicode编码的文件,BOM可以出现在文件最开始,用来指示一个文本所使用的编码。
Unicode有好几种编码,UTF-8,UTF-16BE/LE等。如果不知道文件编码,将无法正确解析文件。BOM则解决了这种问题。
但是对于使用其它方式指定编码的文件,则BOM可能会引发问题。比如对于特定的系统,如果需要手动指定文件编码,则BOM和指定的编码就会有冲突。
而且在这种情况下,程序可能就会不处理BOM,即认为文件是没有BOM的。这样就会将BOM看作是普通的字符来处理。那就是个错误了。
还有就是XML。XML允许通过制定的属性来标记文件所使用的编码。所以XML文件不需要通过BOM来确定编码。所有的XML处理也会忽视BOM。这样就出现了上面所说的问题,造成XML文件解析失败。