Python 3.6编码错误:无法编码字符u'\xe1',求解决方案
解决pyodbc字段编码报错问题
我来帮你搞定这个编码问题!先给你捋清楚错误的根源——你看到的 'ascii' codec can't encode character u'\xe1' 其实不是 encode('utf-8') 的问题,反而出在前面的 str(field) 操作上。
问题到底出在哪
从错误信息里的 u'\xe1' 能判断你用的是Python 2环境。在Python 2中,str() 函数把Unicode对象转成字符串时,默认会用ASCII编码。而你的 field 是pyodbc返回的Unicode类型,里面包含了á这类非ASCII字符,用ASCII编码转自然就报错了。至于你脚本顶部加的 # -*- coding: utf-8 -*-,它的作用是告诉Python你的脚本文件本身是utf-8编码,管不到运行时字符串的转换逻辑,所以对这个问题没帮助。
两种不丢字符的解决方案
你可以直接用下面任意一种方法解决:
直接对Unicode字段encode:pyodbc在Python 2里返回的文本字段本身就是Unicode类型,完全不需要先转成
str,直接编码即可:field.encode('utf-8')先转Unicode再encode(更兼容):如果
field有可能是数字、日期等非文本类型,可以先转成Unicode再编码,确保所有场景都能正常处理:unicode(field).encode('utf-8')
这样处理后,就能正确把带特殊字符的字段转成utf-8编码的字节串,不会再出现编码报错啦。
内容的提问来源于stack exchange,提问作者Kenobi
相关产品推荐
相关产品推荐

