GBK 和 UTF-8 都是 bytes 类型
注意:Py2的默认字符串类型也是str,但是它对应的是py3中的bytes类型。
Py3:默认类型是str类型,实际上是unicode类型。
什么时候会用到bytes类型?
- 一般用于网络存储和传输
encode()和decode()
-
decode:解码 encode:编码
-
字符串在python内部的表示的是unicode编码,在做编码转换的时候,通常需要以unicode作为中间编码,即先将其他编码的字符串(decode)成unicode,再从unicode编码(encode)成另一种编码。
-
decode的作用是将其他编码的字符串转换成unicode编码, str1.decode(‘utf-8’),表示将utf-8编码的字符串str1解码转换成unicode编码
-
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode字符串str2编码转换成gb2312编码。
题:把gbk的bytes类型转换为utf-8的bytes类型
byte类型和编码名字有关系
编码之间的转换要通过Unicode进行中间的转换
GBK(bytes)–> utf-8(bytes)?通过chardet检测,并尝试用一行代码解决。
先用encode声明一个GBK的
用decode转为Unicode,再用encode转为utf-8
“GBK” 和“utf-8”
>>> s="ww"
>>> type(s)
<class 'str'>
>>> s=s.encode("GBK")
>>> type(s)
<class 'bytes'>
>>> s=s.decode("utf-8")
>>> type(s)
<class 'str'>
>>>
方法一:
>>> s="光荣之路".encode("gbk")
>>> s.decode("gbk").encode("utf-8")
b'\xe5\x85\x89\xe8\x8d\xa3\xe4\xb9\x8b\xe8\xb7\xaf'
>>> import chardet
>>> chardet.detect(s.decode("gbk").encode("utf-8"))
{'encoding': 'utf-8', 'confidence': 0.938125, 'language': ''}
方法二:用一句话解决
>>> chardet.detect("光荣之路".encode("gbk").decode("gbk").encode("utf-8"))
{'encoding': 'utf-8', 'confidence': 0.938125, 'language': ''}
步骤分解:
bytes(gbk) --bytes(utf-8)
1.bytes(gbk): ”abc”.encode(“gbk”)
2.转换为unicode: “adb”.encode(“gbk”).decode(“gbk”)
3.将Unicode转为bytes(utf-8)
“abc”.encode(“gbk”).decode(“gbk”).encode(“utf-8”)