0

对于我的生活,我无法弄清楚:我只是想从 .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')

我已经尝试将这两种策略以及其他方法结合起来,但我没有尝试过任何工作。我究竟做错了什么?

4

1 回答 1

1

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

$ PYTHONIOENCODING=utf-8 python myprogram.py
于 2013-08-18T22:47:46.257 回答