涉及到的编码有以下几种:
- ASCAII码:在ascall中英文字符为1个字节,不能存中文字符(所以有人问你:ascll码中中文字符占几个字节就是想坑你)
- Unicode(万国码):默认中英字符都是2个字节
- UTF-8:(Unicode的一个扩展集:可变长或叫可伸缩编码)英文字符按照ascll占1个字节;中文字符一般占3个字节。
- GBk(国标:我国95年制定的收录了21003个汉字的编码)GBK向下兼容gb2312
下面就是以上几种编码的转换:
如图所示:为三种编码之间的转换
注意gbk与utf-8转换必须经过Unicode这个桥梁
__author__ = '70786'
# coding:utf-8 (整个文件编码为utf-8,但是默认的编码格式为unicode)
import sys
print(sys.getdefaultencoding())
s = "你好" #默认为unicode
print(s)
s_gbk = s.encode("gbk")
s_utf8 = s.encode("utf-8")
print(s_gbk)
print(s_utf8)
gbk_to_utf8 = s_gbk.decode("gbk").encode("utf-8")#gbk转换utf-8 标准写法
print(gbk_to_utf8)#结果为utf-8编码
utf8_to_gb2312 = s_utf8.decode("utf-8").encode("gb2312")
print(utf8_to_gb2312)
s2 = s_utf8.decode("utf-8").encode("gb2312").decode("gb2312")# **编码之后变成了bytes 再解码就又变回了字符串。**
print(s2)
运行结果:
utf-8
你好
b'\xc4\xe3\xba\xc3'
b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xc4\xe3\xba\xc3'
你好