utf-8编码学习

unicode是一个编码的符号集,容纳了世界上的所有的符号。但是unicode只是规定了符号的二进制代码,并没有规定二进制代码应该如何存储。所以,就出现了utf-8编码。Utf-8只是规定了unicode的二进制代码,在计算机中的存储方式。

   utf-8是可边长的编码方式,使用1-4个字节来表示一个符号。Utf-8的编码规则也很简单,根据符号的unicode编码进行变化。

   以下是unicode转化为utf-8的规则。

clip_image002

    对于utf-8第一个字节的数据最前面的1决定这个符号是由几个字节编码。如果是0,表示是一个字节编码,2,表示两个字节编码,4表示4个字节编码。后面的字节的前两位都是10。然后再将符号的unicode编码,依次填入到x中。

    以下举个例子:

      使用记事本,里面写入一些数据,保存为utf-8格式。

clip_image003

    以上是文件中的内容,我用的是notepad++,可以使用插件hex-editor查看二进制文件

clip_image005

    以上就是文件中的内容以utf-8的格式保存的数据。

    来对数据进行分析。

    最前面的3个字节ef bb bf是固定的,表示这是一个utf-8编码格式的文件。后面才是真正的内容。

    在网上使用unicode在线转换,查看 卢骏 unicode编码

clip_image006

   得知

汉字

Unicode(十六进制)

Unicode(二进制)

5362

0101 0011   0110 0010

9a8f

1001 1010   1000 1111

   按照编码规则,先看符号的unicode属于哪个范围,从而判定需要几个字节。一比较,就知道两个汉字都属于第三个范围,需要3个字节。

   也就是utf-8格式是:

           1110xxxx 10xxxxxx 10xxxxxx

然后将符号的unicode的二进制从低到高依次填入到格式中的x中,填入顺序也是从低到高。

所以,

汉字

Utf-8(二进制)

Uff-8(十六进制)

1110 0101   1000 1101 1010 0010

E5 8d a2

1110 1001   1010 1010 1000 1111

E9 aa 8f

    和查看的二进制文件是一样的结果。

    然后有两个回车,回车在windows下是0d 0a,这个是ASCII编码的。要转换为utf-8编码。对于ASCII127个字符,对应的utf-8编码其实和ASCII编码是一样的。所以utf-8下的回车还是0d 0a

    然后又是“卢骏这两个汉字,编码就是E5 8d a2 E9 aa 8f。然后又是一个回车,0d 0a。最后是weiqi7777。按照ASCII编码,就是77 65 69 71 69 37 37 37 37

    最后分析的结果就是以下:

xclip_image008 

此条目发表在其他分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。