日期:2014-05-16  浏览次数:21248 次

去除Windows UTF-8 BOM标记

标准的UTF-8编码是没有字节顺序问题的,所以Unicode标准里没有定义UTF-8的字节顺序标记(Byte Order Mark)。但是,微软经常不按常理出牌,它产生的UTF-8文件往往画蛇添足,在文件头加上EFBBBF三个字节。GNU的万能编码转化工具iconv遵循Unicode标准,所以它是不支持带BOM的UTF-8文件。如果试图用iconv转化带BOM的UTF-8文件就会产生如下错误:

[abc@xyz ~]$ iconv -f utf-8 -t CP950 p05.lg > haha
iconv: illegal input sequence at position 0

?

由于这个三个特征字符串是是不可见的,一般的文本编辑器都不能直接编辑。所以,消除UTF-8 BOM需要特殊的工具。在Vim里,可以通过ex命令set nobomb来消除。