2016-12-04 5 views
0

Я пытаюсь получить некоторые символы Юникода, распечатанные или записанные в текстовый файл, и нахожусь в Ошибках. Проконсультируйтесь, пытаясь google дал мне несколько советов, но эта ошибка тоже. .below мой code..What может я делаю неправильно здесь ..Печать и запись символов Юникода в Python

Я пытаюсь в конечном счете использовать «запросы» и разбора JSON с данными, который имеет значения Unicode ..

Я пытаюсь разобрать JSON используя запросы от этого URL-адреса

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 [ «компания»] [0] [имя] имеют несколько Unicode символов, которые обыкновение дисплея на терминале командной строки, а также не будет писать в файл с требуемым выходом (Unicode)

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

Как я могу заставить python интерпретировать эти значения по мере их появления?

+1

, что это ошибка? в чем вопрос? – Juggernaut

+0

Кстати bytes = u '' уже является строкой unicode – user312016

+0

Вы уверены, что ваш шрифт терминала поддерживает те недостающие символы? –

ответ

0

не будет отображаться на терминале командной строки

Какие ошибки вы получаете? В любом случае, следующие работы, если вы удалите ненужные str() преобразования и цитаты 'name' на терминале, который поддерживает UTF-8, такие как 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']) 
+0

Спасибо за подробное объяснение, я использую Windows 10, а терминал командной строки не поддерживает шрифты, но мне было интересно, почему он не будет писать в файл с этими русскими символов, но с кодом, который вы показали, он работает! Благодаря! –

1

Ваши «байты» уже юникод, поэтому ошибок не должно быть.

>>> 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"") в юникод, кодировка по умолчанию 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') 
ООО "Парадиз" 
+0

Unicode обрабатывается гораздо более разумным способом в python 3. Если вы новичок в python, я настоятельно рекомендую использовать это вместо python 2. –

+1

Я бы порекомендовал это, даже если вы не новичок в python – user312016

Смежные вопросы