`

如何去掉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会使用两个或三个字节。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/thimin/archive/2007/08/03/1724393.aspx

 



我的愚蠢解决办法:

发现有些文件是UTF-8编码却没有带BOM(Byte Order Mark),然后就直接把需要修改的文件(带有BOM的)拷贝至这些不带BOM的文件,修改文件名再保存:), 新文件将不带BOM!

分享到:
评论
1 楼 powerclark 2010-03-26  
使用notepad++,选择格式,然后选择不含BOM的编码方式即可。。。

相关推荐

    UTF-8文件的Unicode签名BOM(Byte Order Mark)问题

    近日在调测一个UTF8编码的中文Zen Cart网站时遇到一件怪事,网页显示文字正常,用ie的察看源文件(记事本打开)却发现乱码,firefox没有这个问题。

    批量去除 bom 工具

    "批量去除BOM工具"就是为了解决一个特定的编码问题——Unicode Byte Order Mark (BOM) 对某些程序或编辑器可能产生的影响。本文将深入探讨BOM的含义、为什么需要去除以及如何使用批量去除BOM工具。 BOM(Byte Order...

    去除BOM文件头工具

    然而,UTF-8有三种形式:带BOM(Byte Order Mark)和不带BOM的。BOM是Unicode字符集中的一个特殊标记,用于标识数据流的字节顺序,但在某些情况下,比如在Eclipse和IntelliJ IDEA之间导入项目时,BOM可能会引起问题...

    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。这个标记是...

    C#获取去除文件bom头后的内容

    在编程领域,尤其是在处理文本文件时,BOM(Byte Order Mark)是一个常见的概念,它用于标识文件的字符编码。在UTF-8编码中,BOM是一个特殊的字节序列`FF FE`,用以表明该文件是UTF-8编码。然而,在某些情况下,BOM...

    什么是BOM头,如何去掉BOM头.zip

    BOM(Byte Order Mark)在Unicode编码中是一个特殊的字符,用于标识文件的字符编码格式。在UTF-8编码中,BOM头由三个字节组成(0xEF, 0xBB, 0xBF),它并不是必须的,但有时候会被添加到文件的开头来表明该文件是...

    去除所有页面BOM头

    在IT行业中,BOM(Byte Order Mark)是一个特殊字符,主要用于标识文本文件的编码格式,尤其是在UTF-8编码中常见。BOM头并不是必须的,但在某些情况下可能会引起问题,例如在JavaScript处理JSON数据或者在网页显示...

    java处理BOM头的XML

    BOM(Byte Order Mark)是Unicode字符集中的一个特殊字符,用于标识文本的编码方式。在UTF-16编码中,BOM通常出现在文件的开头,用来区分大端序(UTF-16BE)和小端序(UTF-16LE)。在UTF-8编码中,BOM是可选的,但...

    utf-8 去除bom头文件

    "BOM"是Byte Order Mark的缩写,UTF-8的BOM头是一个特殊的三位字节序列(0xEF, 0xBB, 0xBF),用于标识文件是以UTF-8编码的。然而,在某些情况下,这个BOM头可能会引起问题,例如在编程或文本处理时,因此我们需要...

    去除BOM头小工具.rar

    然而,UTF-8有一个特性,那就是它允许存在一种叫做“BOM”(Byte Order Mark)的标记,用于指示字节顺序。BOM头通常在文件的起始位置,由三个特定的字节序列(0xEF, 0xBB, 0xBF)构成。 标题提到的"去除BOM头小工具...

    php 批量bom去除工具php代码

    BOM(Byte Order Mark)是Unicode编码中的一个特殊字符,用于标识文本的字节顺序。在某些情况下,BOM可能会引起不必要的问题,比如在一些文本编辑器中显示异常或者导致解析错误。因此,有时候我们需要批量去除文件中...

    UTF-8文件批量去除BOM标记

    在UTF-8编码的文件中,为了方便识别文件的编码类型,有时会在文件开头添加一个特殊的“字节顺序标记”(Byte Order Mark,简称BOM)。BOM本身没有实际意义,它的存在是为了让阅读器知道这是一个UTF-8编码的文件。...

    文件BOM批量删除工具

    BOM,即Byte Order Mark,是在某些Unicode编码中用于标识字节顺序的特殊字符。在UTF-16和UTF-32中,BOM的存在是为了让解析器知道字节的顺序,但在UTF-8中,BOM并不是必需的,有时反而可能会引起问题,比如在某些编程...

    批量去除bom的代码

    在编程世界中,BOM(Byte Order Mark)是Unicode字符集中的一个特殊字符,用于标识文件的编码方式。尤其在处理UTF-8编码的文本文件时,BOM常常会在文件的开头出现。对于PHP开发者来说,BOM可能会引起一些不必要的...

    批量移除文件的BOM格式

    在编程世界里,BOM(Byte Order Mark)是一种特殊的Unicode字符,用于标识文件的编码方式。在UTF-8编码中,BOM是一个可选的字节序列,通常出现在文件的开头,用来告诉软件该文件是用UTF-8编码的。然而,有些程序,...

    去除BOM头小工具.7z

    在IT行业中,BOM(Byte Order Mark)是一个用于标识字符编码的小型字节序列,尤其在UTF-8编码中常见。BOM头通常出现在文件的起始位置,用来表明文件所采用的编码方式。然而,有些情况下,BOM头可能会引起问题,比如...

    什么是BOM头?如何去除文件中的BOM头

    BOM(Byte Order Mark)头,也称为字节顺序标记,是Unicode编码格式的一个特殊字符。它通常出现在UTF-8、UTF-16和UTF-32编码的文件开头,用于标识文件所使用的字符编码类型。在UTF-8编码中,BOM头由三个字节构成:EF...

    去除bom头小工具,单个可执行文件,可按文件夹批量替换,支持自定义文件类型

    在IT行业中,BOM(Byte Order Mark)头通常是指UTF-8编码格式文件中的一个特殊字符序列,用于标识文件的编码方式。这个字符序列在某些程序处理文本时可能会引起问题,尤其是在开发环境中,例如导致代码编辑器显示...

    java去掉txt文本的bom头信息

    在Java编程中,处理文本文件时,我们可能会遇到BOM(Byte Order Mark)头信息的问题。BOM是Unicode编码格式中的一个特殊字符,用于标识文件的编码类型,常见于UTF-8、UTF-16和UTF-32等格式。在某些情况下,如读取或...

    解决项目中html去除BOM问题

    在Web开发中,有时会遇到因文件编码问题导致的页面显示异常,其中一种常见的问题是文件头部存在BOM(Byte Order Mark)标记,这会导致HTML页面出现乱码或者解析错误。本文将详细介绍如何通过一个简单的PHP脚本解决...

Global site tag (gtag.js) - Google Analytics