在Python中使用%格式化字符串时的UnicodeEncodeError

时间:2013-08-18 20:50:55

标签: python string unicode formatting

对于我的生活,我无法解决这个问题:我只是试图从.json文件中提取消息和谁说出来。虽然我不能在这里透露这些数据,但这就是它的作用:

print '<%s> %s' % (x['sender_id'], x['content'][0]['text'])

“x”是包含我需要知道的事物的词典。每行的输出如下所示:

<username> The quick brown fox jumps over the lazy dog.

如许多IRC日志中所见。无论如何,元组中的两个字符串都有Unicode。也就是说它们正式是Python unicode类型。我检查了。但是当我尝试将它们格式化为该字符串时,结果总是如下:

UnicodeEncodeError: 'ascii' codec can't encode character u'\U0001f52b' in position 26: ordinal not in range(128)

我尝试了很多东西,比如写这个:

print u'<%s> %s' % (x['sender_id'], x['content'][0]['text'])

或者:

print '<%s> %s' % (x['sender_id'], x['content'][0]['text']).encode('utf-8')

我尝试将这两种策略结合起来,除此之外还有其他的东西,但是没有我尝试了它。我做错了什么?

1 个答案:

答案 0 :(得分:1)

可能print使用ASCII编码写入stdout,导致问题。检查sys.stdout.encoding的值以确定。要么确保只打印ASCII字符串,要么使用PYTHONIOENCODING env变量将默认的stdout编码设置为更合理的UTF-8。例如:

$ PYTHONIOENCODING=utf-8 python myprogram.py