преобразовать строку '\ u05d9 \ u05d7 \ u05e4 \ u05d9 \ u05dd' в ее символ Юникода в python - PullRequest
2 голосов
/ 28 января 2012

Я получаю объект Json из URL, который имеет значения в форме, как показано выше: Название: '\ u05d9 \ u05d7 \ u05e4 \ u05d9 \ u05dd'

Мне нужно распечатать эти значения в виде читаемого текста, однако я не могу преобразовать их, поскольку они воспринимаются как буквенные строки, а не как объекты в кодировке Unicode.

делает unicode(myStr) не работает
делает a = u'%s' % myStr не работает

все экранируются как строки, поэтому возвращают одинаковую последовательность символов. Кто-нибудь знает, как я могу сделать это преобразование в Python?

Может быть, правильный подход - изменить кодировку ответа, как мне это сделать?

Ответы [ 3 ]

4 голосов
/ 28 января 2012

Вы должны использовать модуль json для загрузки данных JSON в объект Python. Он позаботится об этом за вас, и у вас будут строки Unicode. Затем вы можете закодировать их в соответствии с вашим устройством вывода и распечатать.

1 голос
/ 28 января 2012

в строках json всегда используется ", а не ', поэтому '\u05d9\u05d7\u05e4\u05d9\u05dd' не является строкой json.

Если вы загрузите действительный текст json, то все строки Python в нем будут Unicode, поэтому вы нене нужно ничего декодировать.Для их отображения вам может понадобиться кодировать их, используя кодировку символов, подходящую для вашего терминала.

Пример

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json

d = json.loads(u'''{"title": "\u05d9\u05d7\u05e4\u05d9\u05dd"}''')
print d['title'].encode('utf-8') # -> יחפים

Примечание: это совпадение, что исходная кодировка(указано в первой строке) равно выходной кодировке (последняя строка), они не связаны и могут отличаться.

Если вы хотите видеть меньше \uxxxx последовательностей в jsonтекст тогда вы можете использовать ensure_ascii=False:

Пример

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json

L = ['יחפים']
json_text = json.dumps(L) # default encoding for input bytes is utf-8
print json_text # all non-ASCII characters are escaped
json_text = json.dumps(L, ensure_ascii=False)
print json_text # output as-is

Выход

["\u05d9\u05d7\u05e4\u05d9\u05dd"]
["יחפים"]
0 голосов
/ 28 января 2012

Если по какой-то причине у вас есть строка, подобная этой, за пределами вашего объекта JSON, вы можете декодировать строку, используя raw_unicode_escape, чтобы получить нужную строку юникода:

>>> '\u05d9\u05d7\u05e4\u05d9\u05dd'.decode('raw_unicode_escape')
u'\u05d9\u05d7\u05e4\u05d9\u05dd'
>>> print '\u05d9\u05d7\u05e4\u05d9\u05dd'.decode('raw_unicode_escape')
יחפים
...