python -- 字符编码操作
python -- 字符编码操作
ASCII 一个英文字符只占一个字节,不能存中文,所以出现了Unicode。Unicode默认是2字节,8位。由于这样多出的多余空间,所以推出了utf-8(Unicode的扩展集,可变长),utf-8的英文和ASCII一样,一个字节,中文就变成3字节。
Unicode是中间件,需要靠它来转换。
graph TD
A[Unicode] -->|encode| B[UTF-8]
B -->|decode| A
A -->|encode| C[GBK]
C -->|decode| A
GBK需要转换成UTF-8格式流程:
- 首先通过解码[decode]转换成Unicode编码
- 然后通过编码[encode]转换成UTF-8的编码
UTF-8需要转换为GBK格式流程:
- 首先通过解码[decode]转换成Unicode编码
- 然后通过编码[encode]转换成GBK的编码
decode()里面填写的是原先的编码,encode()里面填写的是需要转成后的编码
获得Python版本的编码格式
Python3
# 在Python3中默认编码是Unicode,utf-8是Unicode的可变长字符集
# 在Python2中默认编码是ASCII
import sys
a = sys.getdefaultencoding()
# utf-8
print(a)
Python2
# 在Python3中默认编码是Unicode,utf-8是Unicode的可变长字符集
# 在Python2中默认编码是ASCII
import sys
a = sys.getdefaultencoding()
# ascii
print(a)
在Python2环境
#-*- coding:utf-8 -*-
import sys
a = sys.getdefaultencoding()
s = '你好!'
# 如果不加decode('utf-8'),系统会调用默认的编码解码(ascii),会报编码错
s_to_gbk = s.decode('utf-8').encode('gbk')
# ascii
print(a)
print(s_to_gbk)
# gbk
print(type(s_to_gbk))
写在后面
- 无论在哪个pyhton版上,需要转码时,都先decode(),再encode()。
- decode()里面加原始编码
- encode()里面加需要编译后的编码
- py程序头文件的[# -*- coding:utf-8-*-]是说明程序用utf-8编译,但是py程序内的字符串编码还是python默认的编码。所以转换编码的时候,还需要加decode,再加encode。
| 版本 | 默认编码 |
|---|---|
| Python2 | ACSII |
| Python3 | Unicode |

浙公网安备 33010602011771号