beyondsanli 发表于 2013-2-4 19:50:06

Utf-8编码是如何工作的 (转改)

关键字: 编码
<div class="blog_content">Utf-8编码是如何工作的讲起。

(JVM规范第4.4.7提了一些,O'Reilly出的Java I/O里讲的比较详细,我手里的是第一版,在第14章,Mutillingual Character Sets and Unicode)

Java用的Unicode用两个字节表示一个charater,字母A用Hex表示是00 41, B是00 42,在一个纯英文的环境里面,直接存成Unicode的文件一半都是由零组成的,浪费资源。Utf-8的主要目的是对ASCII表格头128个字母优化,牺牲的是对中文字符的存储。

头128个字节(0到127),可以用七个bit来表示,x6 x5 x4 x3 x2 x1 x0.第八个bit 7x 永远是0

例子,A, 用Hex表示是00 41,去掉开头的零字节是Hex 41,转成二进制是 0100 0001。XP带的计算器可以在Hex和Binary
之间转换,自己试试。

第128(十进制)到2047个字节,要用10个bit来表示


0 0 0 0 0 x10 x9 x8
x7 x6 x5 x4 x3 x2 x1 x0


Utf-8就把这些字节编成下面这样的两个byte


1 1 0 x10 x9 x8 x7 x6
1 0 x5 x4 x3 x2 x1 x0


第2048(十进制)到65535个字节,要用16个bit来表示,Utf-8把这些字节编成下面这样的三个byte

1 1 1 0 x15 x14 x13 x12
1 0 x11 x10 x9 x8 x7 x6
1 0 x5 x4 x3 x2 x1 x0


读一个Utf-8编码的array,如果第一个byte的高位是1110,那么要连读下面两个以 10 开头的byte。如果一个byte的高位是110,那么要连读下面一个以 10 开头的byte。
如果一个byte的高位是0,那么这个byte就是一个字符了。
页: [1]
查看完整版本: Utf-8编码是如何工作的 (转改)