Board logo

标题: Unicode 及编码方式概述-2 [打印本页]

作者: look_w    时间: 2018-3-17 13:02     标题: Unicode 及编码方式概述-2

Unicode                几种常见编码方式Unicode 字符集中的字符可以有多种不同的编码方式,如 UTF-8、UTF-16、UTF-32、压缩转换等。这里的 UTF 是 Unicode                transformation format 的缩写,即统一码转换格式,将 Unicode                编码空间中每个码点和字节序列进行一一映射的算法。下面详细介绍一下这三种常见的 Unicode 编码方式。
UTF-8编码方式
UTF-8 是一种变长的编码方式,一般用 1~4 个字节序列来表示 Unicode 字符,也是目前应用最广泛的一种 Unicode                编码方式,但是它不是最早的 Unicode 编码方式,最早的 Unicode 编码方式是 UTF-16。UTF-8 编码算法有以下特点:
图 3. UTF-8                    编码方式点击查看大图
在实际的解码过程中:
情况 1:读取到一个字节的首位为 0,表示这是一个单字节编码的 ASCII 字符;
情况 2:读取到一个字节的首位为 1,表示这是一个多字节编码的字符,如继续读到                1,则确定这是首字节,在继续读取直到遇到 0 为止,一共读取了几个 1,就表示在字符为几个字节的编码;
情况 3:当读取到一个字节的首位为 1,紧接着读取到一个 0,则该字节是多字节编码的后续字节。
图 4 概述了 UTF-8                编码方式的特点,其中的"自同步"表示在传输过程中如果有字节序列丢失,并不会造成任何乱码现象,或者存在错误的字节序列也不会影响其他字节的正常读取。例如读取了一个                10xxxxxx                开头的字节,但是找不到首字节,就可以将这个后续字节丢弃,因为它没有意义,但是其他的编码方式,这种情况下就很可能读到一个完全不同或者错误的字符。
图 4. UTF-8                    编码方式UTF-16编码方式
UTF-16 是最早的 Unicode 字符集编码方式,在概述 UTF-16 之前,需要解释一下 USC-2                编码方式,他们有源远流长的关系,UTF-16 源于 UCS-2。UCS-2 将字符编号(同 Unicode                中的码点)直接映射为字符编码,亦即字符编号就是字符编码,中间没有经过特别的编码算法转换。图 5 对 UCS-2 编码方式的概括。
图 5. UCS-2                    编码方式由图 5 可知,UCS-2 编码方式只覆盖基本多语言平面的码点,因为 16 位二进制表示的最大值为 0xFFFF,而对于增补平面中的码点(范围为                0x10000~0x10FFFF,十进制为 65536~1114111),两字节的 16 位二进制是无法表示的。为了解决这个问题,The                Unicode Consortium 提出了通过代理机制来扩展原来的 UCS-2 编码方式,也就是 UTF-16。其编码算法如下:
图 6. UTF-16                    代理对但是在实际的编码过程中通过查表是很麻烦的,图 7 列出了 UTF-16 编码算法是如何对增补平面中的码点进行编码的。
图 7. UTF-16                    编码算法剖析UTF-16 对增补平面中的码点编码还是很负责的,但是由于 UTF-16 是最早的 Unicode 编码方式,已经存在于很多程序中。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0