Я пытаюсь вернуть JSON из службы API от musicbrainz, возвращаемые данные для некоторых песен содержат символы юникода, из-за которых у меня возникают проблемы с преобразованием их в обычные символы и т. д. Пожалуйста, дайте мне знать, что мне следует делать здесь.
JSON:
{
"status": "ok",
"results": [{
"recordings": [{
"duration": 402,
"tracks": [{
"duration": 402,
"position": 6,
"medium": {
"release": {
"id": "dde6ecee-8e9b-4b46-8c28-0f8d659f83ac",
"title": "Tecno Fes, Volume 2"
},
"position": 1,
"track_count": 11
},
"artists": [{
"id": "57c1e5ea-e08f-413a-bcb1-f4e4b675bead",
"name": "Gigi D\u2019Agostino"
}],
"title": "You Spin Me Round"
}],
"id": "2e0a7bce-9e44-4a63-a789-e8c4d2a12af9"
}, ....
Неудачный код (пример):
string = '\u0420\u043e\u0441\u0441\u0438\u044f'
print string.encode('utf-8')
Я использую это на машине с Windows 7 и имею Python 2.7 и запускаю этот код в терминале командной строки. У меня есть вывод, который я получаю ниже:
C:\Python27>python junk.py Gigi DGÇÖAgostino Gigi D?Agostino Gigi D\u2019Agostino
Я ожидаю, что результат будет Gigi D' Agostino
string = u'\u0420\u043e\u0441\u0441\u0438\u044f'
, переменная правильно устанавливается вРоссия
. Кстати, не используйте строку в качестве имени переменной; это может закончиться только слезами. - person Malvolio   schedule 15.01.2013print u'Gigi D\u2019Agostino'.encode('utf-8')
' ‹br›print u'Gigi D\u2019Agostino'.encode('iso-8859-15', 'replace')
‹br›a = u'Gigi D\u2019Agostino' import re a = re.sub(r'[\x80-\xFF]+', lambda x: x.group(0).encode('latin1').decode('utf8'), a) print a.encode('utf8')
- person Prem Minister   schedule 15.01.2013# -*- encoding: utf-8 -*-
- person der_fenix   schedule 15.01.2013# -*- encoding: utf-8 -*-
print u'Gigi D\u2019Agostino'.encode('utf-8')
print u'Gigi D\u2019Agostino'.encode('iso-8859-15', 'replace')
out = 'Gigi D\u2019Agostino' out = out.replace( u'\u2018', u"'") out = out.replace( u'\u2019', u"'") out = out.replace( u'\u201c', u'"') out = out.replace( u'\u201d', u'"') out.encode('ascii') print out
a = u'Gigi D\u2019Agostino' import re a = re.sub(r'[\x80-\xFF]+', lambda x: x.group(0).encode('latin1').decode('utf8'), a) print a.encode('utf8')
- person Prem Minister   schedule 16.01.2013