UTF-8编码原理

Unicode用两个字节表示一个字或外语字母(包括简体繁体中文、日文漢字、韩文字、阿拉伯语字母、俄语字母等所有广泛使用的语言字符),字母A用Hex表示是00 41, B是00 42,在一个纯英文的环境里面,直接存成Unicode的文件一半都是由零组成的,浪费资源。Utf-8的主要目的是对ASCII表格头128个字母优化,牺牲的是对中文字符的存储。UTF(Unicode Transer Format,即Unicode字符传输格式)。中国制订的汉字编码标准有GB2312、GBK、GB18030(包括了中国少数民族字符)、台湾Big5(繁体)。Windows XP采用unicode编码。DOS和以前的Window使用ANSI编码。

      Unicode编码中(按二进制值的从小到大顺序)头128个字节(0到127),可以用七个bit来表示,x6 x5 x4 x3 x2 x1 x0。第八个bit永远是0

例如,英语字母A, 用Hex表示是00 41,去掉开头的零字节是Hex 41,转成二进制是 0100 0001,即A的UTF-8编码。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编码的文本文件时,如果第一个byte的高位是1110,那么要连读下面两个以 10 开头的byte,3个字节构成一个字符(字或字母)。如果一个byte的高位是110,那么要连读下面一个以 10 开头的byte,两个字节构成一个字符(字或字母)。如果一个byte的高位是0,那么这个byte就是一个字符了。UTF-8编码是为串行字符通信设计的。

你可能感兴趣的:(优化,windows,XP,dos,byte,hex)