在 Python 中打印和写入 Unicode 字符

printing and writing Unicode characters in Python

我正在尝试将一些 Unicode 字符打印出来或写入文本文件,但 运行 出现错误。请指教,尝试 google 给了我一些提示,但那个错误ed也是..下面是我的代码..我在这里做错了什么..

我正在尝试最终使用 'requests' 并使用具有 Unicode 值的数据解析 JSON..

我正在尝试使用来自此 url

的请求解析 JSON

https://api.discogs.com/releases/7828220

try:
        import requests
import json
url = 'https://api.discogs.com/releases/7828220'
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' }
art = requests.get(url, headers=headers)
json_object = json.loads(art.text)
try:
    print str(json_object['companies'][0][name])
except:
    print "Genre list isn't defined"

    {u'name': u'\u041e\u041e\u041e "\u041f\u0430\u0440\u0430\u0434\u0438\u0437"', u'entity_type': u'10', u'catno': u'PARAD-432', u'resource_url': u'https://api.discogs.com/labels/210403', u'id': 210403, u'entity_type_name': u'Manufactured By'}

这里 json_object['companies'][0][name] 有一些 Unicode 字符不会显示在命令行终端上,也不会写入具有所需输出的文件 (Unicode )

Actual output looks like "ООО "Парадиз"", 

我怎样才能 python 解释这些值?

你的"bytes"已经是unicode了,所以应该不会出错。

>>> bytes = u'\xd0\x9e\xd0\x9e\xd0\x9e"\xd0\x9f\xd0\xb0\xd1\x80\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xb7"'
>>> print unicode(bytes) 
ÐÐÐ "ÐаÑадиз"

但是,如果您要将 python2 字符串/字节串(没有 u"" 前缀)转换为 unicode,则默认编码为 ascii。

>>> bytes = '\xd0\x9e\xd0\x9e\xd0\x9e"\xd0\x9f\xd0\xb0\xd1\x80\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xb7"'
>>> print unicode(bytes)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

此处使用的正确编码是 UTF8。您可以告诉 unicode() 使用哪种编码。

>>> print unicode(bytes, 'utf8')
ООО "Парадиз"

won't display on the command line terminal

你遇到了什么错误?无论如何,如果您删除不必要的 str() 转换并在支持 UTF-8 的终端上引用 'name',例如 Linux:

import requests
import json

url = 'https://api.discogs.com/releases/7828220'
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' }
art = requests.get(url, headers=headers)
json_object = json.loads(art.text)
print json_object['companies'][0]['name']

输出:

ООО "Парадиз"

在 Windows 上,命令控制台可能不会默认使用支持您尝试打印的字符的编码。一种简单的方法是切换到受支持的编码,在这种情况下 chcp 1251 将代码页更改为支持俄语的代码页,并且将使上述工作正常进行。

要将其写入文件,请使用 io.open 和编码:

import io
with io.open('output.txt','w',encoding='utf8') as f:
    f.write(json_object['companies'][0]['name'])