这是我在知乎上找的,有兴趣的可以看看:https://www.zhihu.com/question/23374078
http://www.androidstar.cn/unicode%E5%92%8Cutf-8%E4%B9%8B%E9%97%B4%E7%9A%84%E5%85%B3%E7%B3%BB/
Unicode 和 UTF-8 有何区别?
我自己的看法是:
Unicode是一套统一的字符集。收录了所有的字符。符号等。统一改为两个字节的所有字符的集合。
而UTF-8是一种编码规则,是一套以8位为一个编码单位的可变长度的编码,会将一个为1到4个字节
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
... ...
作者:uuspider
链接:https://www.zhihu.com/question/23374078/answer/65352538
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UTF-8 是一种 Unicode 的编码方式,主要作用对 Unicode 码的数据进行转换,转换后方便存储和网络传输。
在我们日常的程序中:encode与decode
编码是把字符转换成二进制:encode。
呈现在我们面前的是unicode。在python3中。存储在磁盘上的和网络上传输是UTF-8格式,内存中的是unicode。
- 二进制 -> 转换 -> 字符串 需要解码 decode
- 字符串 -> 转换 -> 二进制 需要编码 encode
python3 内存中使用的字符串全部是
unicode
码,但是网络传输的数据或者从磁盘读取的数据是把unicode
码转换过的数据,通常情况下可能是utf-8
格式的数据,所以如果从网络中读取或者磁盘中读取其实就是把utf-8
格式的数据解码成unicode
码数据,相反如果想把内存中unicode
码数据存储到磁盘或者网络中需要对unicode
码进行编码,通常可以采用utf-8
的形式进行编码。