python字符编码

最近一直被字符编码所困扰,本想找资料解决这个疑惑,奈何网上众说纷纭,所以按照个人倾向做了一些结论性的总结(有点随意):

字节、字节流、二进制

ASCII、GBK、Unicode、UTF-8

python2、str、Unicode、字符串

python3、 str、Unicode、字符串

encode()、decode()、Unicode

一、结论:

一、ASCII、GBK同时表示字符集和编码格式。ASCII使用1个字节存储一个字符,字节首位是0;GBK使用2个字节存储一个中文字符,第一个字节首位是1,GBK兼容了ASCII字符集。

二、Unicode是字符集,UTF-8是编码格式(是Unicode字符集的编码实现)。Unicode的编码格式可分为utf-32 (4个字节存储一个字符),utf-16(2个字节存储一个字符),utf-8(1-4个字节存储一个字符,中文字符占用3个字节)。

三、python 2中默认字符集与编码格式是 ASCII。

四、python 3中默认字符集是 Unicode,默认编码格式是UTF-8。

五、编码:把字符按照指定编码格式编码成字节;解码:把字节按照指定编码格式解码成字符。

六、字节解码时使用的格式必须和字符编码时使用的编码格式一致,否则会出现乱码。

二、py3中的编码和转码的过程

python字符编码_第1张图片

注:Unicode是中间字符集,任何字符编码地转换都会先解码成Unicode,再按照指定的编码格式编码。

#无需声明字符编码,当然你声明也不会报错
s = '你好'
s_to_gbk = s.encode("gbk")  # 字符串s已经是unicode字符,无需解码
print("------s_to_gbk------")
print(s_to_gbk)
gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")  #需要先使用gbk格式解码成unicode字符,再使用utf-8格式编码
print("------gbk_to_utf8------")
print(gbk_to_utf8)
utf8_decode = gbk_to_utf8.decode("utf-8")  #使用utf-8格式解码成unicode字符
print("------utf8_decode------")
print(utf8_decode)
------s_to_gbk------
b'\xc4\xe3\xba\xc3'
------gbk_to_utf8------
b'\xe4\xbd\xa0\xe5\xa5\xbd'
------utf8_decode------
你好

你可能感兴趣的:(python基础,python)