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,方能正确处理。