Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Прочитать \u041f\u0430\u0440\u0430\u0433\u0432\u04


Автор: kulibinka 21.10.2008, 10:35
Получаю страницу с интернета - там весь текст вида \u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439
И это точно русский текст smile

Подскажите пожалуйста как эту абрукадабру полюдски прочитать (unicode decode encode пробовал, но впустую).

Автор: pythonwin 21.10.2008, 10:41
Код

>>> print u'\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439'
Парагвай


Автор: kulibinka 21.10.2008, 10:45
Точно, почти то что надо smile
Код

    text = '\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439';
    new_text0 = u"%s"%text
    new_text1 = u"\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439"
    print new_text0
    print new_text1


Получаем
\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439
Парагвай

Почему new_text0 не равно new_text1 (т.е. как не вручную (дописывая u) получить декодированный текст)?

Автор: Daevaorn 21.10.2008, 11:31
Цитата(kulibinka @  21.10.2008,  11:45 Найти цитируемый пост)
Почему new_text0 не равно new_text1 (т.е. как не вручную (дописывая u) получить декодированный текст)? 

Последовательность символов "\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439" уже уникод строка. Но вам не повезло и вы её получили в виде байт-строки. Если создавать уникод строку форматированием, то все операнды будут приводиться к уникоду, но с декодированием в дефолтную кодировку.

Надо всего лишь создать из неё всё-таки уникод строку, но без декодирования. Например так:
Код

>>> text = '\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439'
>>> print text.decode("raw_unicode_escape")
Парагвай
>>> print unicode(text, "raw_unicode_escape")
Парагвай

Автор: kulibinka 21.10.2008, 11:50
Цитата(Daevaorn @ 21.10.2008,  11:31)
Надо всего лишь создать из неё всё-таки уникод строку, но без декодирования. Например так:
Код

>>> text = '\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439'
>>> print text.decode("raw_unicode_escape")
Парагвай
>>> print unicode(text, "raw_unicode_escape")
Парагвай

Спасибо smile

Автор: dipsy 6.3.2009, 17:42
а при выводе через mod_python, уже после перекодировки, потребовалось добавить ещё и encode: 
Код

    answer = unicode( text, "raw_unicode_escape" )
    req.write( answer.encode("utf-8") )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)