关于python3 encode(),decode(),以及出现\xe5\xad\xa6\xe4\xb9\xa0python如何解决

重点:
1.python3与python2不同,python3是默认采用utf-8编码的,因此当使用encode(),decode()这两个函数的时候,其实默认是使用了encode(“utf-8”),decode(“utf-8”)
2.encode()是相对于字符串使用的方法,只有字符串数据才可以使用encode(),返回的是一个bytes类型的Unicode编码
如:

s = "学习python"
>>> s_gbk = s.encode("gbk")   #这里以gbk编码转为Unicode
>>> s_utf = s.encode("utf-8")  #这里以utf-8编码转换为Unicode
>>> s_gbk
b'\xd1\xa7\xcf\xb0python'       #这是一个bytes对象,前面加了个b
>>> s_utf
b'\xe5\xad\xa6\xe4\xb9\xa0python'#这是一个bytes对象,前面加了个b
>>>

3.decode是相对于bytes类型数据而言的,只有bytes类型数据才可以使用decode(),返回的是一个字符串

#原编码是什么方法内就应填入什么,否则转换会出现乱码
>>> s_gbk.decode("gbk")
'学习python'
>>> s_utf.decode("utf-8")
'学习python'
>>> s_utf.decode()    #默认是转为utf-8,如果不指定的话
'学习python'

# 如果转换不对,就会出现乱码
>>> s_utf.decode("gbk")
'瀛︿範python'
>>> s_gbk.decode("utf-8")
'ѧϰpython'
>>>
>>>

4.了解以上规范后就清楚该如何处理乱码异常了:

a.出现看不懂的字符乱码,如“ ‘瀛︿範python’、‘ѧϰpython’”应该就是转码的时候使用了不同的编码格式造成的

b.当收到一个字符串为:s = "\xd1\xa7\xcf\xb0python "时,表示我们是需要转码才能看到中文。从编码上可以看出用的是gbk,但给的却是str类型,从上面的理解可知,我们先要将其转换为bytes类型数据,然后才能使用decode(“gbk”)输出。这里就要使用encode(“raw_unicode_escape”)这个方法了,可以将字符串原封不动的转为bytes类型。为什么不能用s.encode(“gbk”)直接转呢?因为gbk编码里面没有xd1,python识别不了就会报错!

>>> s = "\xd1\xa7\xcf\xb0python "
>>> s.encode("gbk")      #直接使用encode("gbk") 是会报错的!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'gbk' codec can't encode character '\xd1' in position 0: illegal multibyte sequence
>>> s.encode("raw_unicode_escape") #需要使用encode("raw_unicode_escape")
b'\xd1\xa7\xcf\xb0python '
>>> s.encode("raw_unicode_escape").decode("gbk") #转换为bytes后再使用decode("gbk")转为中文即可
'学习python '
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值