捋一捋Unicode和UTF-8两个的作用

2018-10-31  本文已影响0人  sunxu_cocoa

前言

开发的过程中经常要对文本进行编码之后再传给服务器,比如说上传表情到服务器,这个时候经常会用到什么UTF-8编码,有的人又说什么Unicode编码,这两者都是什么之前一直似懂非懂,自作主张的人为是两种不同的字符编码方式。经过一系列百度之后对这个问题有个更成熟的理解,在此做个笔记。

首先Unicode是一个字符集,很牛,它包含世界上所有的字符,每个字符对应一个二进制编码,用两个字节保存。这样的话所有国家的所有字符都可以在网络上自由的传输,但是这样做有个问题就是本来英文字母A,用ASCII编码是十进制的65,二进制的01000001,一个字节就可以保存,如果按照Unicode的标准需要两个字节保存,白白浪费了一个字节,这样肯定不好,如果我是美国人也不想要这样的结局,所以就通过人们的智慧就出现了UTF-8。

UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。那么通过UTF-8编码之后字母A只需要一个字节就可以了,这样美国人就比较开心了,但中国人又不太开心,因为汉字通过UTF-8编码之后通常需要三个字节,多花了一个字节,这个时候相比中国自己的GB2312编码方式显得不是很厚道,但为了世界统一,UTF-8的出现利大于弊,如果每个国家都按照自己的方式来,互联网就乱了。UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

UTF-8编码规则

1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

这样就形成了如下的UTF-8标记位:

0xxxxxxx

110xxxxx 10xxxxxx

1110xxxx 10xxxxxx 10xxxxxx

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

总结

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。所以UTF-8的出现是为了更好的存储和网络传输,如果传输的内容多为字母,那么这种方式将会节约不少流量,就酱。

上一篇下一篇

猜你喜欢

热点阅读