python2 默认 ASCLL 不支持中文 转换比较麻烦、需要先解码成unicode然后在编码成想转换的语言
1 s = "特斯拉"2 s_to_unicode = s.decode("utf-8")3 unicode_to_gbk = s_to_unicode.encode("gbk")4 print(s)5 print("unicode:" ,s_to_unicode)6 print("gbk:",unicode_to_gbk)7 8 #在python2中如果想要将gbk转换成utf-8,9 # 首先需要将gbk解码(decode)成unicode,然后在编码(encode)成utf-8
python3 默认 unicode encode 会在编码的同时把数据转成byte类型,python2中的encode没有此功能 decode 会在解码的同时吧数据类型byte转换成字符串。 英文,数字会直接打印,但是中文会被用b'i am \xcc\xd8\xcb\xb9\xc0\xad '这种类似格式打印出来 b = byte = 字节类型 = [0-255] unicode 默认会支持所有的类型,因此在python3中不需要在转码了。
1 s = "i am 特斯拉 "2 # 默认就是unicode,若想转换成其他编码直接编码就可以了3 s_to_gbk = s.encode("gbk") # 编码成gbk4 print(s)5 print(s_to_gbk)6 print(s_to_gbk.decode("gbk")) #gbk解码回去unicode
是不是 decode 和 encode 总是分不清 没关系我们还有更舒服的方法 统一都用 encode 编码 字符串 转 bytes 用 str的内置方法encode bytes 转 字符串 用 bytes的内置方法encode
1 a = "shshh" 2 print(str.encode(a)) # b'shshh' 3 b = str.encode(a) 4 print(b) # b'shshh' 5 print(bytes.encode(b)) # shshh 6 7 8 a = "shshh" 9 print(bytes(a,encoding="utf-8")) # b'shshh'10 b = bytes(a,encoding="utf-8")11 print(str(b,encodng="utf-8")) # shshh