Unicode 与 UTF-8 的关系?

Unicode

Unicode (中文称:万国码)给每个字元提供了一个唯一的数位,不论是什么平台、不论是什么程式、不论是什么语言。

简而之,Unicode是字符集,将所有的文字,符号等等编码。

UTF-8 是编码的方式,优化 Unicode 的编码。

例如: “Hi! 你好”

你看到的 Unicode 字符编码是这样的:

H 0048
I 0069
你 4F60
好 597D

每一个字符对应了一个16进制的数字。

由于电脑只懂2进制编码,所以按照 Unicode 的方式(UCS-2),会按以下储存:

H 00000000 01001000
i 00000000 01101001
! 00000000 00100001
你 01001111 01100000
好 01011001 01111101

这个字符串共估了8个字节,对比以上中英文2进制编码,英文前9个都是0,占用了硬碟容量,十分浪费!

怎样优化?

UTF-8 的诞生就是为了优化这个问题。

  1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;
  2. n个字节的字符 n>1,第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。如以下所示:
UCS-2: 00000000 00000000 00000000 011111112
UTF-8: 0XXXXXXX
-----
UCS-2: 00000000 00000000 00000111 111111112
UTF-8: 110XXXXX 10XXXXXX
------
UCS-2: 00000000 00000000 11111111 111111112 
UTF-8: 1110XXXX 10XXXXXX 10XXXXXX
------
UCS-2: 00000000 00011111 11111111 111111112 
UTF-8: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

所以 “Hi! 你好” 就变成了

H 01001000
I 01101001
! 00100001
你 11100100 10111101 10100000
好 11100101 10100101 10111101 

对比 UCS-2 及 UTF-8,英文的字节变短了,虽然每个中文字符用多了一个字节。但整体来说 UTF-8 只用了9个字节,比 UCS-2 的10个字节小了一点。

整体来说,UTF-8 更节省了字节的占用容量,至小在英文字符上的确较为节省。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容