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本来就不应该加bom,除了 让编辑器知道它是个utf-8之外什么用处都没有。实际上编辑器完全有能力在不太多的几个编码格式之间根据特征来判断一个文件是什么编码,就算不能自动识 别,编辑器也应该有设置编码的地方。所以我觉得BOM对于utf-8来说是多余的东西。
utf-16才需要加bom。因为它是按unicode顺序编码,在BMP范围内是二字节,需要识别是大或小字节序。
实 际上,我觉得utf-8引入大小字节序的概念太愚蠢了,不知道那些标准委员会是怎么想的。大小字节序存在的意义,在于cpu的处理方式。如果cpu是大字 节序处理,那么对于小字节序,就必须做一层转换,这带来了效率上的下降。但是在实际应用里,谁会去关心大小字节序?文本编码引起字节序的概念,只能说那些 制定标准的人太死板了。对于utf-16,我认为只要全世界都遵循一种字节序方式,那就没什么必要用BOM来标注了。
话说回来,PHP是不支持utf-16编码的文件的。因为例如$这个符号,在utf-8里也是两个字节,PHP解码器无法解析的。不知道PHP6内部处理引入unicode 的概念之后,对这个是否会有支持。
编 码问题是一个说起来简单,但是实际上很繁琐的东西。很多程序,都有分层编码的概念。像MySQL,就分为 client->connection->storage和storage->connection->result这些概念。 storage又分为system,database,table,column。我有时候在想,有必要搞这么复杂嘛,TNND。像MySQL,谁用利用 它这些特性阿?除非允许两个client在不同的编码环境下运作,否则它把client编码分离出来根本没有什么必要。大多数情况下,直接binary in/binary out就好了
相关推荐
本文将深入探讨几种常见的编码格式,如GB2312、UTF-8以及UTF-8-BOM,并详细讲解如何在C#中进行这些编码格式之间的转换,同时会涉及到与Stream相关的操作。 GB2312,全称为“国标汉字编码字符集”,是中国大陆广泛...
然而,UTF-8有一个特殊的形式,即带BOM(Byte Order Mark)的UTF-8,这个BOM在某些情况下可能会引发问题。本文将详细探讨Java中如何处理UTF-8的BOM问题。 首先,我们需要理解什么是BOM。BOM是Unicode编码中的一个...
Forcibly saves all files in UTF-8 (No BOM) encoding. ForceUTF8 的核心功能在于其智能识别并转换字符串编码的能力。即使字符串中混杂着多种编码,\ForceUTF8\Encoding::toUTF8() 都能成功将其转换为统一的UTF-8...
"批量utf文件转utf8-bom"这个主题指的是将一批以UTF编码的文件转换为带有BOM(Byte Order Mark)的UTF-8编码。BOM是一个特殊的字节序列,用于标识文件的编码类型,对于UTF-8编码,BOM的字节序列为0xEF, 0xBB, 0xBF。...
然而,UTF-8编码有一种特殊的形式,即带有BOM(Byte Order Mark)的UTF-8,也被称为UTF-8 with BOM。BOM是一个特殊的字符序列,用于标识文件的编码方式,但在某些情况下,BOM可能会引起问题,例如在某些编程语言中...
1.首先介绍一下本人应用场景,qt...3.此小工具主要针对utf-8编码文件,能够批量添加删除BOM,无识别转化ASIIC功能,添加BOM时,如果文件是utf-8(BOM),则跳过,删除亦然 4.当不选中添加删除时可用于文件数量统计。
UTF-8的特殊之处在于它包含一个字节顺序标记(BOM),即UTF-8+BOM,但大多数情况下,UTF-8无BOM更常见。 在PHP中,进行字符编码转换可以使用内置函数,如`mb_convert_encoding()`,这个函数可以将字符串从一种编码...
当上传文件存在中文时,修改上传文件编码为utf-8-bom
标题中的“PB9转换utf-8例子”指的是在PowerBuilder 9(PB9)环境下将数据从非UTF-8编码转换为UTF-8编码的一种解决方案。由于PB9本身不直接支持这种转换,开发者通常需要利用外部库或者特定的编程技巧来实现这个功能...
虽然UTF-8无BOM是更常见的选择,但IDEA也允许创建带BOM的UTF-8文件。 3. **保存文件**:在保存文件时,可以通过设置选择是否添加BOM。这在与不支持BOM的系统交互时尤其有用。 4. **版本控制**:如果使用Git等版本...
解决PB创建UTF-8文件带BOM问题; 2.字段串直接生成XML文件。 由于项目需要,需要字符串转为XML文件,直接用Fileopen进行EncodingUTF8编码后,发现文件实际为UTF-8 BOM编码 问度娘发现有相同问题,但解决方式是利用...
这个场景中,我们面临的挑战是如何正确处理UTF-8带有BOM(Byte Order Mark)的文件,因为BOM可能会导致文件内容显示为问号或者其他乱码。下面将详细介绍如何解决这个问题。 首先,我们需要理解什么是UTF-8的BOM。...
UTF-8编码是一种广泛使用的字符编码方式,尤其在互联网和软件开发中占据核心地位。它能够表示Unicode字符集中的所有字符,确保...通过这个工具,用户可以轻松地管理和维护无BOM的UTF-8文件,保证数据的准确性和兼容性。
UTF-8文件通常以BOM(字节顺序标记)开始,用来标识文件的编码类型。在某些情况下,你可能需要在读取或写入时考虑BOM。在写入时,`ADODB.Stream`会自动添加BOM;在读取时,可以使用`Mid`函数从字节数组的第一个字节...
3. **处理 bom**:UTF-8有两种形式,带BOM(字节顺序标记)和不带BOM,根据需要选择合适的转换结果。 4. **处理异常文件**:有些文件可能包含无法正确转换的特殊字符,需要特别处理。 5. **确认转换后兼容性**:确保...
"去除BOM头小工具.exe"是一个实用程序,专门用于批量处理UTF-8编码的文件,移除文件头的BOM标记。这个工具可以极大地提高工作效率,避免手动逐个编辑文件的繁琐过程。在日常开发中,如果你遇到因为BOM导致的问题,...
1. **Unicode与UTF-8**: Unicode是一个国际字符集,包含了世界上几乎所有的文字系统,包括拉丁文、汉字、阿拉伯文、希伯来文等。UTF-8是Unicode的一种实现方式,它是变长编码,每个字符可以由1到4个字节表示。对于...
在易语言中实现另类数据库读写UTF-8,主要是为了克服原生支持的不足,提供更灵活和高效的数据存储与读取方式。 首先,我们需要了解易语言中的数据库接口。易语言提供了多种数据库操作的模块,如ODBC(Open Database...
如果需要兼容多个Excel版本,可以使用UTF-8编码格式,并在文件头部输出BOM,即0xEF 0xBB 0xBF这三个字节。 Java避免UTF-8的csv文件打开中文出现乱码的方法是使用UTF-16LE编码格式,并在文件头部输出BOM。同时,需要...