常见编码的种类
ASCII:一开始计算机是这种编码的,但只用英文,中文不兼容
||
||
\/
Unicode:万国码,好多种语言都包含在里面,但有时候(当英文时)占内存
||
||
\/
UTF-8:比较完美的编码,英文还是1个字节,中文一般3个字节
注:8个比特(bit)作为一个字节(byte)
三种编码的占字节数:
语言 | ASCII | Unicode | UTF-8 |
---|---|---|---|
英文 | 1个字节 | 2个字节 | 1个字节 |
中文 | X | 占2个字节(偏僻字占4个字节) | 占3个字节(偏僻字占4~6字节) |
ASCII是最开始的编码,只有英文。当然计算机不可能就说英语的国家用吧,随后出现了Unicode,从上面表看出,但如果全英文的使用Unicode的话,那就要多一半内存吧,所以就有了UTF-8,英文的还是只用一个字节。
现代计算机编码方式
以下这个一段,说得很简单易懂,引用来自廖雪峰老师的博客:
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器
python3的编码
首先,认准一个基准:python3的字符串str
使用了Unicode
编码。
如果在网络上传输或保存到磁盘上的话,就需要把str
转为bytes
,使用encode()
函数。另外,bytes
一个字符只占一个字节。
如果是从网络、磁盘上读取字节流,读到的数据为bytes
类型,可以使用decode()
函数对其进行转换。
相关的3个函数
ord()
:获取字符的整数表示;
chr()
:把编码转换为对应的字符;
len()
:如果是str
就计算其字符数,如果是bytes
就计算其字节数。
>>>str = '博客'
>>>print(len(str))
>>>2
str = '博客'
# 用encode()转为bytes类型
print('>>>',len(str.encode('utf-8')))
>>> 6
在python的学习过程中,字符编码的转换是非常重要的,如果熟悉python中的编码,我们在解决问题的时候,就可以事半功倍了。