编码知识学习笔记之三

简介:   编码知识学习笔记之三 一.UTF-8的如何编码 UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下: 序号 UCS-2编码的范围(16进制) UTF-8 字节流(二进制) 说明 1 0...
 

编码知识学习笔记之三

一.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编码了。

相关文章
|
1月前
|
设计模式 算法 程序员
编码之道:从功能实现到艺术创作
【2月更文挑战第26天】 在数字世界的构建中,代码不仅是实现功能的桥梁,更是连接创意与现实的纽带。本文将探讨如何将日常的编程实践提升为一种艺术性的创造活动,从而让技术工作超越单一的任务执行,变成一种富有表现力和创造力的过程。通过分析编程的核心原理、探索代码的美学特质,并结合个人的实践体验,本文旨在启发读者重新认识编程的内涵,发现编码过程中的艺术潜能。
|
9月前
|
程序员
【软工视频】第五章程序编码
【软工视频】第五章程序编码
|
11月前
|
Java 数据安全/隐私保护
CTF 编码工具编写
CTF 编码工具编写
|
存储 缓存 C++
Python 二十三大实践、编码建议和技巧
Python 二十三大实践、编码建议和技巧
99 0
Python 二十三大实践、编码建议和技巧
组织解码之六
问面试官什么问题可以了解到企业真正的文化,《首席组织官》
78 0
组织解码之五
你见过“伪”高管吗?《首席组织官》
96 0
组织解码之三
组织建设toB还是toC的选择,《首席组织官》
125 0
组织解码之四
组织建设为什么要有toC+toB思考,《首席组织官》
96 0
组织解码之二
系统的视角理解组织,《首席组织官》
122 0