Unicode和UTF-8的区别

来源:互联网 发布:淘宝产品参数 编辑:程序博客网 时间:2024/06/06 08:24

Unicode和UTF-8的区别

http://blog.sina.com.cn/s/blog_149e9d2ec0102wyio.html


      世界上的编码方式千差万别,比如ASCII,Unicode,UTF-8,UFT-16,UFT-32,GB2312等等,但是此处我们仅仅讲解unicode和utf-8的区别。

1. Unicode编码方式
它的全称是:”Universal Multiple-Octet Coded Character Set”,简称UCS,俗称 “unicode“。
       在制定Unicodo编码时,计算机已经得到了极大的发展,存储空间已经不在是制约计算法发展的问题了。因此,国际标准化组织在定义unicode编码时,要求所有的字符必须以两个字节(16位)表示。但是这样死性的规定,必然会导致一些问题,比如如何用unicode表示ASCII,ASCII只需要八位,256个数字即可完全表示,那么多出的8位将会全部置0,这样就会浪费一般的空间,对于大文件,这样的浪费是让人心痛的,所以这也就导致了unicode在很长的一段时间内并没有得到快速的发展。
       直到互联网的出现,为了解决unicode的固有问题,所以utf-8应运而生。


2. UTF-8编码方式
      为了解决Unicode的网路传输问题,那么面向传输的utf-8标准出现了,utf-8每次传输的是8位数据。那么,顾名思义,utf-16就是每次传输16位数据,utf-32每次传输32位数据。
此处需要注意的是uitf-8是unicode编码方式之一
utf-8最大的特点就是它是一个变长的编码方式,他可以使用1~4个字节表示一个符号,根据不同的符号改变字节的长度。

utf-8有两条常用的使用规则:
1. 对于单字节的符号,字符的第一位是0,后面7位是字符的unicode编码。因此对于英文字母,utf-8和ASCII编码方式是一样的。
2. 对于n个字节(n>=2), 第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。 

Unicode符号范围 | UTF-8编码方式 
(十六进制) | (二进制) 
--------------------+--------------------------------------------- 
0000 0000-0000 007F | 0xxxxxxx 
0000 0080-0000 07FF | 110xxxxx10xxxxxx 
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx10xxxxxx 
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx10xxxxxx 

下面,还是以汉字“严”为例,演示如何实现UTF-8编码。 

已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(00000800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“1110010010111000 10100101”,转换成十六进制就是E4B8A5。

注:部分信息借鉴与互联网。