2013-08-18 51 views
0

格式化字符串%时,对我的生活,我不知道这一点:我只是想提取的消息,谁从以.json文件说他们。虽然我不能在这里透露的数据,这是做这行:UnicodeEncodeError在Python

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

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

$ PYTHONIOENCODING=utf-8 python myprogram.py 
+0

情节实际上增厚。我注意到只有这个角色是一个问题,即:。其他人没有投诉就经历了。你的建议也没有用。不管怎样,谢谢你。我有点开始相信,Python中可能存在一个错误,或者这里有一个畸形的或奇特的/专有的Unicode字符。显然它应该是一个手枪的图像:http://www.iemoji.com/view/emoji/376/events/pistol-or-revolver – Sadiq

+0

什么是'sys.stdout.encoding'? –

+0

默认情况下,无。我只是浏览了bash历史,发现我写了PYTHONENCODING而不是PYTHONIOENCODING。它现在有效。 – Sadiq