Python 字符编码
Python3 的系统默认编码是 UTF-8,其中:
- 文本字符全部用
str
表示(包括 Unicode 字符集中所有字符) - 二进制字节数据用
bytes
表示(可以是 ASCII 范围内的字符和其它十六进制形式的字符)
在字符引号前加 ‘b’,明确表示这是一个 bytes 类型的对象。
Python2 与 Python3 字节与字符的对应关系:
Python2 | Python3 | 表现 | 转换 | 作用 |
---|---|---|---|---|
str | bytes | 字节 | encode | 存储、网络传输 |
unicode | str | 字符 | decode | 显示 |
str
与 bytes
之间的转换可以用 encode
和 decode
方法:
encode
负责字符到字节的编码转换,默认转换为 UTF-8 编码:
1 |
|
decode 负责字节到字符的解码转换,默认使用 UTF-8 编码格式进行转换:
1 |
|
ASCII、Unicode、UTF-8 区别:
- ASCII 使用 1 个字节,将最高位置为 0,后七位从 0 到 127 分别对每一个符号编码,能表示的字符十分有限;
- 由于很多符号 ASCII 没办法表示,各国又在 ASCII 的基础上创建了适合自己语言的符号编码表,比如欧洲的 ISO,中国 GBK ……一时间天下大乱;
- 为了解决编码混乱的问题,Unicode 收纳了全世界大部分的字符,从 0 一直编到了 100 多万,每一个区间都对应着一种语言的编码,所有的字符都有了唯一的编号;
- 但是 Unicode 没有对字符编号的二进制编解码做出规定,因此就出现了 UTF-8,UTF-16,UTF-32 这些编码方案。其中 UTF-16 使用 2 个字节来编码所有的字符,UTF-32 则选择用 4 个字节来编码,而使用最多的就是 UTF-8 编码方案;
- UTF-8 为了节省资源,采用变长编码,把一个 Unicode 字符根据不同字符内容编码成 1-6 个字节,可以显示中文(3 字节),同时兼容 ASCII 编码。
简单来说,Unicode 是 字符集,UTF-8 是 编码规则:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!