[转]UTF-8 & BOM

From http://www.zhihu.com/question/20167122

UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。
所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。
BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order)。微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 ASCII 等编码明确区分开,但这样的文件在 Windows 之外的操作系统里会带来问题。

「UTF-8」和「带 BOM 的 UTF-8」的区别就是有没有 BOM。即文件开头有没有 U+FEFF。

UTF-8 的网页代码不应使用 BOM,否则常常会出错。这是一个小例子: 为什么这个网页代码 <head> 内的信息会被浏览器理解为在 <body> 内?

另附《The Unicode Standard, Version 6.0》之 3.10 D95 UTF-8 encoding scheme 的一段话:

While there is obviously no need for a byte order signature when using UTF-8, there are occasions when processes convert UTF-16 or UTF-32 data containing a byte order mark into UTF-8. When represented in UTF-8, the byte order mark turns into the byte sequence. Its usage at the beginning of a UTF-8 data stream is neither required nor recommended by the Unicode Standard, but its presence does not affect conformance to the UTF-8 encoding scheme. Identification of the byte sequence at the beginning of a data stream can, however, be taken as a near-certain indication that the data stream is using the UTF-8 encoding scheme.

时间: 2024-11-12 20:23:05

[转]UTF-8 & BOM的相关文章

Android 上的 制表符(tab) —— 一个神奇的字符 (cocos2dx crash)

今天测试发现了游戏的一个问题,系统邮件,如果发了tab,在android上一打开邮件内容就会crash.而且他们很确定是tab的问题. 凭我多个月的经验(确实没多年...)来看,从来没听说在android上会因为一个tab崩溃,而且如果有这个问题,肯定会有很多人遇到,估计早就吵翻天了,搜索了一下,什么可用信息都没有. 于是写个测试工程测试了一下,分别在mac下和windows下,用文本编辑工具编辑了4个txt文档,utf有bom和无bom,内容是" tab abcd ",发现都能正常显

《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误

http://blog.csdn.net/aqi00/article/details/72907534 http://blog.csdn.net/aqi00/article/details/73065392 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 资源下载 下面是<Android Studio开发实战 从零基础到App上线>一书用到的工具和代码资源:1.本书使用的Android Studio版本为2.2.3,因为Android官网现在不提供该版本的下载,所以博主

计算机字符编码详尽讲解

from http://www.guokr.com/blog/763017/ http://blog.csdn.net/stilling2006/article/details/4129700 下载一个文档,一打开发现是乱码,不抓狂才怪…… 你们都知道,这都是字符编码闯的祸.ASCII.ANSI.GB18030.Unicode.UTF-8.UTF-8 with BOM.UTF without BOM.UTF-16.UTF-16LE.UTF-16BE…… 一大坨的谁分得清?听说UTF-8就是Uni

ajax成功返回数据中存在多余字符的处理

ajax里有需要判断反馈的字符串是否为“ok”,在浏览器里调试,看到返回的内容明明是“ok”,但是if(“ok”==data)判断为false,用alert打印内容也是ok,但是打印长度的时候却是3. 于是把返回内容每个字符的16进制打出来 var hexCharCode = []; hexCharCode.push("0x"); for(var i = 0; i < data.length; i++) { hexCharCode.push((data.charCodeAt(i)

Source Insight完美转换UTF-8 到 GB2312

前言 很多人用source insight 打开某些源码文件时,汉字显示为一堆乱码.这个问题是因为编码方式不同.记事本和一些编辑器默认编码方式是ANSI,在这种方式下输入汉字,其实就是GB系列的编码方式.不幸的是,广收欢迎的代码查看工具Source insight 虽然支持汉字,但是它不支持UTF-8.笔者感到疑惑的是,当初开发source insight的这帮人现在哪里去了?这么好的工具,却不再更新了,实在让人可惜. 可惜归可惜,程序还是要看.乱码怎么办?用记事本打开源代码逐个转换的笨方法虽然

Android 上的 制表符(tab) —— 一个奇妙的字符 (cocos2dx crash)

今天測试发现了游戏的一个问题,系统邮件,假设发了tab,在android上一打开邮件内容就会crash.并且他们非常确定是tab的问题. 凭我多个月的经验(确实没多年. . .)来看.从来没听说在android上会由于一个tab崩溃.并且假设有这个问题.肯定会有非常多人遇到,预计早就吵翻天了,搜索了一下,什么可用信息都没有. 于是写个測试project測试了一下.分别在mac下和windows下,用文本编辑工具编辑了4个txt文档.utf有bom和无bom,内容是" tab abcd "

python标准库之字符编码详解

codesc官方地址:https://docs.python.org/2/library/codecs.html 相关帮助:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html #python标准库(英文地址:)http://www.ask3.cn/ebook/docspy3zh/library/index.html unicode入门: cpython2.xz支持2种类型字符串处理文本数据,老式的str实例使用单个8位字节表示字

遇到乱码不怕不怕啦——计算机字符编码详尽讲解

下载一个文档,一打开发现是乱码,不抓狂才怪…… 你们都知道,这都是字符编码闯的祸.ASCII.ANSI.GB18030.Unicode.UTF-8.UTF-8 with BOM.UTF without BOM.UTF-16.UTF-16LE.UTF-16BE…… 一大坨的谁分得清?听说UTF-8就是Unicode,但怎么Windows记事本里的保存选项有UTF-8和Unicode两个选项呀?!究竟各种软件是怎样判断一个文件是什么编码呢?为什么有时候又判断错误呢?让我一一道来. 世界上本没有字符编

UTF的字节序和BOM

UTF的字节序和BOM UTF-8UTF的字节序和BOM以字节为编码单元,没有字节序的问题.UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序.例如收到一个"奎"的Unicode编码是594E,"乙"的Unicode编码是4E59.如果我们收到UTF-16字节流"594E",那么这是"奎"还是"乙"? Unicode规范中推荐的标记字节顺序的方法是BOM.BOM

BOM的来源是不可能出现的字符,GB2312双字节高位都是1,Unicode理论的根本缺陷导致UTF8的诞生

Unicode字符编码规范 http://www.aoxiang.org 2006-4-2 10:48:02Unicode是一种字符编码规范 . 先从ASCII说起.ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits) 因此,ASCII编码可以表示的最大字符数是256,其实英文字符并没有那么多,一般只用前128个(最高位为0),其中包括了控制字符.数字.大小写字母和其他一些符号 . 而最高位为1的另128个字符被成为“扩展ASCII”,一般用来存放英文的制表符