‘gbk’ codec can’t encode character ‘\U0001f64f’ in position 10: illegal multibyte sequence的解决方法

今天,在解析新浪微博用户资料的时候,如果个人简介中包含有符号表情,就会出现上述问题,我确定不是我代码的问题,因为我在终端打印用户信息就是正确的,不会产生编码错误,在存的时候就会产生上述编码错误。我初步判断是oracle那边设置的字符集可能是gbk或者gb2312,它并不会识别一些特殊的utf-8字符编码,但是oracle服务器如果要重设字符集必须重启服务,而很多程序都依赖这个数据库,所以重启服务是一个不好的选择。于是,我便产生了一个想法,如果直接忽略个人简介中的表情符号,那么存储数据就不会出现问题了。如何识别哪一个字符不能编码呢?查找过后,看到encode()和decode()方法中带有一个error参数,用于处理不能转换的编码,我把代码改为:

get_personalinfo.get_detail(source).description.encode('gbk', 'ignore').decode('gbk')

这样直接就忽略了不能使用gbk编码的字符了。 推荐查看:参考文章