UTF-8格式编码与UTF-8无BOM格式编码的区别(包括java文件)
来源:互联网 发布:java读取property文件 编辑:程序博客网 时间:2024/05/19 15:21
BOM——Byte Order Mark,就是字节序标记
在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。
在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。
由于必须在在Bo-Blog的wiki看到,同样使用PHP的Bo-Blog也一样受到BOM的困扰。其中有提到另一个麻烦:“受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。”这个应该就是Wordpress后台出现空白页面的原因了,因为任何一个被执行的文件包含了BOM,这三个字符都将被送出,导致依赖cookies和session的功能失效。
解决的办法嘛,如果只包含英文字符(或者说ASCII编码内的字符),就把文件存成ASCII码方式吧。用UE等编辑器的话,点文件->转换->UTF-8转ASCII,或者在另存为里选择ASCII编码。如果是DOS格式的行尾符,可以用记事本打开,点另存为,选ASCII编码。如果包含中文字符的话,可以用UE的另存为功能,选择“UTF-8 无 BOM”即可。
- UTF-8格式编码与UTF-8无BOM格式编码的区别(包括java文件)
- UTF-8格式编码与UTF-8无BOM格式编码的区别(包括java文件)
- C#使用StreamWriter生成UTF-8无BOM编码格式
- 关于visiou studio 编辑器 设置 UTF-8 无bom 编码格式的问题
- windows文本文件 utf-8 无bom格式编码引发的惨案(maven resource 替换失败)...mark
- utf-8编码格式
- utf-8编码格式
- C#怎么判断一个文件的编码格式是UTF-8 without BOM的啊
- C++打开特定编码格式的文件(utf-8)
- UTF-8带BOM格式与UTF-8无BOM格式转换
- Python中utf-8与utf-8-sig两种编码格式的区别
- 文字编码utf-8无bom格式(网站页面出现空白行)
- UTF-8编码格式与Unicode编码格式学习
- vba 读写文件,utf-8编码格式
- Unicode, UTF-8, ASCII文件编码格式
- JAVA输出带BOM的UTF-8编码的文件
- UTF—8与UTF—8(无bom)格式相比有什么不同
- UTF—8与UTF—8(无bom)格式相比有什么不同
- java中的抽象接口
- spring 事务不回滚
- 建立个人网站经验分享
- 支持断点续传的FTP实用类备忘
- 关于GridView item动态宽度的问题
- UTF-8格式编码与UTF-8无BOM格式编码的区别(包括java文件)
- arclist解析标签
- keytool生成证书与Tomcat SSL配置
- 隐私策略
- 泊松分布的前世今生
- 基于Jquery easyui 选中特定的tab并更新
- 安卓验证码倒计时的实现
- Light oj 1282 (求一个数的前三位和后三位)
- Android时间日期类小结