立即注册 登录
About云-梭伦科技 返回首页

langke93的个人空间 https://www.aboutyun.com/?1415 [收藏] [复制] [分享] [RSS]

日志

UTF8 与 UTF8 without BOM 之间的问题

已有 1158 次阅读2015-3-18 23:00

UTF-8 编码的文件可以分为 no BOM 和 BOM 两种格式。

何谓BOM? "EF BB BF" 这三个字节就叫BOM,BOM的全称叫做"Byte Order Mard"。在utf-8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意实在utf16中用来表示高低字节序列的。在字节流之前有 BOM表示采用低字节序列(低字节在前面),而utf8不用考虑字节序列,所以其实有无BOM都可以。UTF-8以字节为编码单元,没有字节序的问题。 UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是 594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是 “奎”还是“乙”?

如果文件保存时,选择了使用 BOM,那么就可能会出现 headers already sent 的问题。因为 Web 服务器软件可能不认识 BOM,所以就把 BOM 的两个特殊字节当做字符发送给浏览器了。这时再调用 session_start() 等函数,就会出现 headers already sent 的问题。

所以解决此问题最根本的方法就是在保存 UTF8 编码文件时,不要使用 BOM。

微软的记事本 Word 等只能正确打开含BOM的UTF8文件,然后UltraEdit却恰恰相反,会把 BOM utf8 文件误认为ascii编码。

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

当应用程序的文件使用 UTF8 编码时,在保存文件时,一定要注意 BOM 的问题。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条