编码知识学习笔记之三
来源:互联网 发布:js设置div 的id 编辑:程序博客网 时间:2024/06/05 05:57
一.UTF-8的如何编码
UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:
序号
UCS-2编码的范围(16进制)
UTF-8 字节流(二进制)
说明
1
0000 - 007F
0xxxxxxx
1个字节,格式为
0xxxxxxx
2
0080 - 07FF
110xxxxx 10xxxxxx
2个字节,格式分别为
110xxxxx
10xxxxxx
3
0800 - FFFF
1110xxxx 10xxxxxx 10xxxxxx
3个字节,格式分别为:
1110xxxx
10xxxxxx
10xxxxxx
二.UTF-8编码举例
例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。
将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
三.UTF-16的如何编码
UTF -16以16位为单元对UCS进行编码。
对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。
对于大于或者等于 0x10000的UCS码,定义了一个算法。
不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF -16和UCS-2基本相同。
四.UTF-16与UCS-2的区别
UCS-2仅仅只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。
五.为什么UTF编码会有字节序的问题
UTF -8以字节为编码单元,没有字节序的问题。
UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是 “乙”?
六.UFT字节序理解
UTF-8没有字节序的问题
UTF-16有字节序的问题
七.如何解决UTF-16字节序的问题
Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM具体方法:
在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-16字节序的问题的方法:
BOM
BOM是Byte Order Mark的缩写
八.BOM的实现思想:
在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。
九.BOM对UTF-8的意义是什么
UTF -8是不需要用BOM来表明字节顺序,但可以用BOM来表明编码方式。
字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF
所以接收者如果收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
- 编码知识学习笔记之三
- 编码知识学习笔记之三
- 编码知识学习笔记之二
- 编码知识学习笔记之二
- 编码知识学习笔记之一
- 编码知识学习笔记之一
- Python 编码知识学习笔记
- MPEG4 & H.264学习笔记之三 ------ 熵编码
- MPEG4 & H.264学习笔记之三 ------ 熵编码
- MPEG4 & H.264学习笔记之三 ------ 熵编码
- x264 编码之 psy ,psy_rd [学习笔记 三]
- 视频编码学习之三
- Struts2学习笔记(三)之输入校验(使用直接编码方式)
- 嵌入式linux学习笔记之入门知识
- 学习总结之 Servlet入门知识笔记
- 学习笔记之编程知识储备
- Spring学习笔记之JDK注解知识
- js学习入门篇之知识笔记
- windows 2003、2008关机或重启时的理由选择提示去掉
- nginx安装(Windows)入门实例简介
- 编码知识学习笔记之二
- easyUI ProgressBar
- 利用MEDIAPLAYER制作ANDROID播放器 .
- 编码知识学习笔记之三
- C#解析XML文件
- HDU-2795(线段树入门)
- 图文并茂 在ML OS X 10.8 + XCode4.4下实现无证书真机调试IOS5.1.1(亲测,附调试截图)
- RAII详解
- 遍历Map集合的多种方式
- 初学Android,使用Drawable资源之使用AnimationDrawable资源(十七)
- 年终工作总结:给新手程序员的几个建议
- C语言程序设计第三版 谭浩强课后习题答案完整版