在 Python3 中必须先弄清楚的三个问题:
1,Python3 中默认是 Unicode 编码.
2,gbk --> utf-8,utf-8 --> gbk 都要通过 Unicode"中转" 一下.
3, 在 Python3 中, encode 后不仅转了编码, 还把结果转成了 bytes 类型. 如果要显示中文, 再 decode 一下就可以了.
- import sys
- print("Defaultencoding :", sys.getdefaultencoding())
- s = '你好' # s 是 unicode
- # 转为 UTF-8 编码
- print(s.encode('UTF-8'))
- # 转为 GBK 编码
- print(s.encode('GBK'))
- # 转为 ASCII 编码 (报错为什么? 因为 ASCII 码表中没有'你好'这个字符集~~)
- # print(s.encode('ASCII'))
- print("---------utf-8 --> gbk---------")
- # utf-8 --> gbk
- s = '你好' # s 是 unicode
- # 可以直接 encode 转, 因为 s 就是 unicode, 不需要再转成 uincode
- s_gbk = s.encode('gbk') # 此时已经转成了 gbk, 结果是一个 bytes 类型: b'\xc4\xe3\xba\xc3'
- print(s_gbk)
- print(s_gbk.decode('gbk')) #为了显示中文, 才 decode
- print("---------gbk --> utf-8---------")
- # gbk --> utf-8
- s = '你好' # s 是 unicode
- s_gbk = s.encode('gbk') # 先转换成 gbk, 再 gbk --> utf-8
- # 先 decode 解码, 告诉 decode 原来是什么编码, 然后再 encode 指定要转换成的目标编码
- s_utf8 = s_gbk.decode('gbk').encode('utf-8') # 此时已经转成了 utf-8, 结果是一个 bytes 类型: b'\xe4\xbd\xa0\xe5\xa5\xbd'
- print(s_utf8)
- print(s_utf8.decode()) #为了显示中文, 才 decode
- print("---------gbk --> gb2312---------")
- # gbk --> gb2312
- s = '你好' # s 是 unicode
- s_gbk = s.encode('gbk') # 先转换成 gbk, 再 gbk --> gb2312 , 模拟需要
- s_gb2312 = s_gbk.decode('gbk').encode('utf-8').decode('utf-8').encode('gb2312')
- print(s_gb2312)
- print(s_gb2312.decode('gb2312'))
- print("---------gb2312 --> gbk---------")
- # gb2312 --> gbk
- s = '你好' # s 是 unicode
- s_gb2312 = s.encode('gb2312') # 先转换成 gbk, 再 gb2312 --> gbk, 模拟需要
- s_gbk = s_gb2312.decode('gb2312').encode('utf-8').decode('utf-8').encode('gbk')
- print(s_gbk)
- print(s_gbk.decode('gbk'))
- print("---------utf-8 --> gb2312---------")
- # utf-8 --> gb2312
- s = '你好' # s 是 unicode
- s_gb2312 = s.encode('gb2312')
- print(s_gb2312.decode('gb2312'))
运行结果:
- Defaultencoding : utf-8
- b'\xe4\xbd\xa0\xe5\xa5\xbd'
- b'\xc4\xe3\xba\xc3'
- ---------utf-8 --> gbk---------
- b'\xc4\xe3\xba\xc3'
你好
- ---------gbk --> utf-8---------
- b'\xe4\xbd\xa0\xe5\xa5\xbd'
你好
- ---------gbk --> gb2312---------
- b'\xc4\xe3\xba\xc3'
你好
- ---------gb2312 --> gbk---------
- b'\xc4\xe3\xba\xc3'
你好
---------utf-8 --> gb2312---------
你好
来源: http://www.bubuko.com/infodetail-3351613.html