utf-8 编码学习
0赞
Unicode是一个编码的符号集,容纳了世界上的所有的符号。但是unicode只是规定了符号的二进制代码,并没有规定二进制代码应该如何存储。所以,就出现了utf-8编码。Utf-8只是规定了unicode的二进制代码,在计算机中的存储方式。
Utf-8是可边长的编码方式,使用1-4个字节来表示一个符号。Utf-8的编码规则也很简单,根据符号的unicode编码进行变化。
以下是unicode转化为utf-8的规则。
对于utf-8第一个字节的数据最前面的1决定这个符号是由几个字节编码。如果是0,表示是一个字节编码,2,表示两个字节编码,4表示4个字节编码。后面的字节的前两位都是10。然后再将符号的unicode编码,依次填入到x中。
以下举个例子:
使用记事本,里面写入一些数据,保存为utf-8格式。
以上是文件中的内容,我用的是notepad++,可以使用插件hex-editor查看二进制文件
以上就是文件中的内容以utf-8的格式保存的数据。
来对数据进行分析。
最前面的3个字节ef bb bf是固定的,表示这是一个utf-8编码格式的文件。后面才是真正的内容。
在网上使用unicode在线转换,查看卢骏的unicode编码
得知
汉字 |
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编码。对于ASCII的127个字符,对应的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。
最后分析的结果就是以下:
通过这样一个例子,就可以了解到utf-8是怎么编码的了。