无法读取非ASCII内容。

4

我想在网页中读取非ASCII JSON数据,例如波斯语。以下是我的Python-2.7代码:

jsonObject = json.loads(urllib2.urlopen("https://api.instagram.com/v1/users/"+userId+"/?access_token="+accessToken).read().decode('utf-8').encode('utf-8'));
print jsonObject;

很遗憾,即使进行了解码和编码,我得到的结果仍然是这样的:
{u'meta': {u'code': 200}, u'data': {u'username': u'*******', u'bio': u'\u0639\u06a9\u0633 \u062f\u0648 \u0646\u0641\u0631\u062a\u0648\u0646 \u0631\u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f\U0001f48f\U0001f491', u'website': u'', u'profile_picture': u'*****', u'full_name': u'\U0001f451\u0639\u0634\u0642 \u0647\u0627\u06cc \u0627\u06cc\u0631\u0627\u0646\u06cc\U0001f451', u'counts': {u'media': 31, u'followed_by': 12449, u'follows': 0}, u'id': u'*******'}}

我需要做什么才能正确显示这些字符?

1个回答

6

这很正常。容器内容使用的是 ASCII 友好的 Python 语法表示

打印 各个字符串值,你会发现实际的值仍然存在:

>>> print jsonObject['data']['bio']
عکس دو نفرتون رو ارسال کنید

谢谢!!!但是为什么我在写入csv时需要再次对其进行编码呢?writer = csv.writer(open("hi.csv", 'w')); writer.writerow([jsonObject[u'data'][u'bio'].encode('utf-8')]); 我已经对它进行了一次编码啊!!! - anahita
1
@anahita:Python 2版本的csv模块不太擅长处理Unicode。该模块的文档页面提供了一些解决方法。另外,还可以参考使用Python 2.7读写包括Unicode在内的CSV文件 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接