Byte Order Mark (BOM)
by Yan
调试 guger.org 一个模板,firefox 和 ie 下总是不一样,不得其解。后来想到去这里检测一下网页。它提示说,网页中有 Byte Order Mark (BOM) ,有些浏览器可能不支持。
那什么是 BOM?搜索学习了一下,大概就是 Windows 在文本文件最前头标记编码方式的额外字节。我 Telnet 到主机上打开文件,果然最前面有显示为乱码的古怪字节。删除它,我的问题就解决了。
这个事情告诉我们:
1、在 Windows 下用 notebook 编辑网页要谨慎;
2、w3.org 下这个validator 还是很有用的,即使你并不想花时间做到 Valid XHTML 1.0 Transitional。
我也遇到同样的问题,整了我好久,后来把utf-8改称unicode才ok,但是后来还是不甘心,继续找原因,也是在FF中查看源代码才发现有??,再次google才找到原因的!
1、是notepad,不是notebook
2、如果你在Windows下面编过Unicode程序,就知道Unicode文件前面会有个文件头的:FEFF或者是FFFE,否则notepad下次打开就会是乱码了。
FEFF或FFFE是Unicode的BOM,有些程序不支持的。
Windows下编辑Unicode的文件都会在开头出现这个。
而如果是Unix及类Unix环境下的编辑器通常不会加上BOM标记。
这个问题就是FF不能识别BOM造成的。
其实BOM会造成很多稀奇古怪的问题,如:
编译C语言代码时GCC/G++会报告说文件头有不可识别字符
PHP代码执行时会导致HTTP头在脚本刚开始执行时被立刻输出,也就是这个程序不能再修改HTTP头。
ISO-8859-1环境下UTF-8的BOM显示为:
[…] PS2:BOM实际上挺烦人,如果你的网页(*.html)有BOM,在IE6.x下面打开会发现一神奇的空行,Firefox下却没有,遇到过没? […]
[…] PS2:BOM实际上挺烦人,如果你的网页(*.html)有BOM,在IE6.x下面打开会发现一神奇的空行,Firefox下却没有,遇到过没? […]