`
ylzyd12345
  • 浏览: 118630 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
博客专栏
713488f4-d0a9-3f35-997f-199fb0cb3563
玩懂Log,打开Andro...
浏览量:10165
社区版块
存档分类
最新评论

EF BB BF Unicode签名BOM(Byte Order Mark)

阅读更多
近日在调测一个UTF8编码的中文Zen Cart网站时遇到一件怪事,网页显示文字正常,用ie的察看源文件(记事本打开)却发现乱码,firefox没有这个问题。经在网上多方查证和多次测 试,解决了这个问题,其实是UTF-8文件的Unicode签名BOM(Byte Order Mark)问题。

BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记,在UTF-16里本来是FF FE,变成UTF-8就成了EF BB BF。这个标记是可选的,因为UTF8字节没有顺序,所以它可以被用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测, 而把它当作正常字符处理。

微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记。

也 就是说一个UTF-8文件可能有BOM,也可能没有BOM,那么怎么区分呢?三种方法。1,用UltraEdit-32打开文件,切换到十六进制编辑模 式,察看文件头部是否有EF BB BF。2,用Dreamweaver打开,察看页面属性,看“包括Unicode签名BOM”前面是否有个勾。3,用Windows的记事本打开,选择 “另存为”,看文件的默认编码是UTF-8还是ANSI,如果是ANSI则不带BOM。

我找到Zen Cart的模版文件中的html_header.php,发现文件果然不带BOM,用UltraEdit-32另存为的方式加上BOM后,再上传html_header.php,一切正常。

注 意用Convertz把gb2312文件转换成UTF-8文件时,默认设置是不带BOM的。不带BOM可能出现上述乱码问题,但是带 BOM,对于php的include文件要小心,会在php字节流前面多出EF BB BF,提前输出到显示器有可能会带来程序错误。一个解决方案是凡是被include的文件都保存为ANSI,主文件可以是UTF-8。要想把一个文件去掉 BOM,使用UlterEdit打开, 切换到十六进制编辑模式,把最前面三个字节(就是那该死的 EF BB BF)替换为20,保存(注意关闭保存时自动备份的功能),再切换到默认编辑模式,把最前面的三个空格去掉就可以了。

另 外还学到一些编码的小知识:所谓的unicode保存的文件实际上是utf-16,只不过恰好跟unicode的码相同而已,但在概念上unicode与 utf是两回事,unicode是内存编码表示方案,而utf是如何保存和传输unicode的方案。utf-16还分高位在前 (LE)和高位在后(BE)两种。官方的utf编码还有utf-32,也分LE和BE。非unicode官方的utf编码还有utf-7,主要用于邮件传 输。utf-8的单字节部分是和iso-8859-1兼容的,这主要是一些旧的系统和库函数不能正确处理utf-16而被迫出来的,而且对英语字符来说, 也节省保存的文件空间(以非英语字符浪费空间为代价)。在iso-8859-1的时候,utf8和iso-8859-1都是用一个字节表示的,当表示其它 字符的时候,utf-8会使用两个或三个字节
转自 :http://blog.163.com/result_2205/blog/static/13981945020102954023564/
分享到:
评论

相关推荐

    php UTF-8、Unicode和BOM问题

    UTF-8签名(UTF-8 signature)也叫做BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记。BOM,是UTF编码方案里用于标识编码的标准标记,在UTF-16里本来是FF FE,变成UTF-8就成了EF BB BF。这个标记是...

    PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法

    在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。 在utf-8编码文件中BOM在文件头部,占用三个字节,用来...

    PHP 下载文件时自动添加bom头的方法实例

    在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。不仅限于 记事本保存的文件,只要在文件的开口包含了EF BB...

    Node.js文本文件BOM头的去除方法

    字节顺序标记(byte order mark),是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-...

    HexView.rar_Hex view buffer_aside51c_hexview ef bb bf_ida hexvie

    简单但易用的十六进制查看器。可以调整栏宽度。

    批量去除utf-8的bom头(php版)

    UTF-8不需要BOM来表明字节顺序,但可以...字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来标记文本文件的编码方式的

    批量去掉BOM工具(php源码)

    批量去除文件夹下所有文本文件的bom,解决 stray '\357' in program stray '\273' in program stray '\277' in program 的问题。解决网络传输传递BOM头的问题,不再会有EF BB BF字符了。

    unicode编码与gb2312编码对应表

    unicode编码与gb2312编码对应表,其中gb2312部分是按从小到大排列的,方便查找。主要用于C语言程序中。可以使用二分法查找,提高效率。

    php写入txt乱码的解决方法

    可能你会先尝试从编码入手尝试解决,但最终的...在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。 不仅限于

    php中隐形字符65279(utf-8的BOM头)问题

     ”EF BB BF” 这三个字节就叫BOM,全称是”Byte Order Mard”。在utf8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意是在utf16中用。  utf-8文件在php中输出的时候bom是会被输出的,所以要在php中

    unicode和GBK-BIG5编码对应表.xlsx

    unicode和GBK-BIG5编码对应表,個人辛苦整理,很有參考價值

    EFCore查询不重复数据Distinct.docx

    EFCore查询不重复数据Distinct,根据两个字段排序

    C#16进制unicode字符和汉字相互转换

    个人编写的C#版16进制unicode字符和汉字想换转换的工具,涵盖源码,可以直接运行

    封装ef基类框架

    分享一下 使用EF时,对增删改查基本操作的封装代码 ef重构基类;抛砖引玉,仅供参考; ef增删改差扩展方法!

    MVC+EFMVC+EF

    MVC+EFMVC+EF

    EF动态表名 c# 读取不固定表

    EF链接不固定表名的方法,表名按照日期创建的,ef动态链接,本人初学,多多指教

    C#例子代码 A0650_EF_Oracle

    C#例子代码 A0650_EF_OracleC#例子代码 A0650_EF_OracleC#例子代码 A0650_EF_OracleC#例子代码 A0650_EF_OracleC#例子代码 A0650_EF_OracleC#例子代码 A0650_EF_OracleC#例子代码 A0650_EF_OracleC#例子代码 A0650_...

    .Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统.zip

    .Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统 .Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统 .Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统 .Net Core3.1 + EF Core + LayUI ...

    EF3系列FPGA的数据手册免费下载

    EF3 器件是安路科技的第三代 FPGA 产品,定位通信、工业控制和服务器市场,最多支持 336 个用户 I/O,满足客户板级 IO 扩展应用需求。EF3 器件采用先进的 55nm 低功耗工艺,优化功耗与性能,并可以通过低成本实现较...

    EF批量修改删除数据

    该项目实现了用EF的扩展工具EntityFramework-Plus实现的批量删除修改

Global site tag (gtag.js) - Google Analytics