我在这一行收到错误
logger.info(u"Data: {}".format(data))
我收到了这个错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 4: ordinal not in range(128)
在该行之前,我尝试添加data = data.decode('utf8')
,但我仍然遇到同样的错误。
我尝试了data = data.encode('utf8')
,并说UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 4: ordinal not in range(128)
我该如何解决这个问题?我不知道我是应该进行编码还是解码,但都不起作用。
答案 0 :(得分:2)
使用字符串文字:
if isinstance(data, unicode):
data = data.encode('utf8')
logger.info("Data: {}".format(data))
logging
模块需要传递字符串值,因为这些值会在未更改的情况下传递给格式化程序和处理程序。将日志消息写入文件意味着unicode值使用默认(ASCII)编解码器进行编码。但是在格式化时你还需要传入一个bytestring值。
将str
值传入unicode
.format()
模板会导致解码错误,并将unicode值传入str
{ {1}}模板导致编码错误,并将格式化的.format()
值传递给unicode
也会导致编码错误。
最好不要事先明确地混合和编码。
答案 1 :(得分:0)
您可以执行诸如
之类的操作data.decode( 'UTF-8')。编码( “ASCII”,错误= “忽略”)
这将“忽略”unicode字符
编辑:data.encode('ascii',error ='ignore')可能已经足够,但我目前无法对此进行测试。