Python:Unicode问题

时间:2014-01-28 14:32:16

标签: python unicode utf-8

我在这一行收到错误

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)

我该如何解决这个问题?我不知道我是应该进行编码还是解码,但都不起作用。

2 个答案:

答案 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')可能已经足够,但我目前无法对此进行测试。

相关问题