编码转换

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”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值