UTF-8 & BOM

2014-08-25 开源中国

这几天遇到这么两个问题

1. 在一台机器上面上出一个UTF-8文件, PHP可以正确处理, 而在另一台机器上面上传一个UTF-8文件, PHP出现乱码.

2. 项目里面有一对xml文件, 不知怎么弄了弄(拿EmEditor或notepad修改过~), 然后传到CSV上,然后又拿diff工具做了修改,最后撇到SunAS8(Java1.4)上面跑. 结果解析这些xml文件报错.

 

当时不知道原因, 今天才明白,原来是BOM的问题.

下面这个链接:http://initiative.yo2.cn/archives/tag/python-2 讲述了UltraEdit是怎么破坏一个含有BOM的utf8文件:

文中这样写道
UTF-8的BOM是 EFBBBF,因为UE载入UTF-8文件会转成Utf16,上述的EFBBBF 在Utf16中是FFFE(Unicode-LE的BOM),UltraEdit不认识BOM又加多一個BOM,所以有2个FFFE。文件就被它破坏了。

 

很显然我的问题也是,utf-8格式的文件被破坏了, 虽然我已经回忆不起来破坏是在哪一步骤中引入的.

在Eclipse工程中确认这个问题, 头一次注意到,一个文件如果有BOM, eclipse会在UTF-8下面额外显示一行:

Byte Order Mark is UTF-8
 

 

在je上搜一下utf-8, bom, 还有很多utf-8文件被破坏的生动的例子.

jsp文件首行的问号, weblogic的web.xml, D语言Source文件.......

结论就是多平台, 多编辑器搞utf-8文件的时候, 留心一下他们默认是怎么对待bom的.

 

等多关于BOM以及Utf-8的东西, 大家各显神通吧~~