python之UnicodeEncodeError,UnicodeDecodeError解决办法

python之UnicodeEncodeError,UnicodeDecodeError解决办法


注:以下内容针对python2,python3下可能不正确。

python中文字符的unicode转码是个比较蛋疼的问题,刚接触时可能会莫名其妙。
例如下面的代码:

str.encode('utf-8')

可能就跳出个UnicodeEncodeError: ‘ascii’ codec can’t encode characters。
明明不关ascii什么事啊 !

不管是decodeerror还是encodeerror,解决办法:

1、使用type(str),查看str的类型,是str还是unicode。python的string对象和unicode对象虽然都是字符串,但其实是两个不同的东西。

2、如果str类型是string(type(str)显示 ‘str’), 则只能对其调用decode();如果str类型是unicode,则只能对其encode()。至于为啥只有unicode类型才能encode(),以后再议。

3、如果对string类型进行encode(), 例如 : str.encode(‘utf-8’)。假如str本身是gbk或utf-8编码,我们期望它能转成utf-8编码。首先python执行时会先检查str的类型,因为只有unicode类型才能encode,所以程序会“智能”地调用decode()转换为unicode类型。由于这一步是在解释器里面自动调用,没法指定编码,所以程序会使用getdefaultencoding()获得默认编码。而默认编码一般是ascii, 这就是‘ascii’ codec can’t encode characters的由来。

总结一下:
在准备encode()或decode()之前,务必确认字符串类型是str还是unicode,方能正确处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值