Форум сайта python.su
0
Посоветуйте PLZ как декодировать строку содержащую коды unicode?
x= ‘\u0418\u0433\u0440\u0430 \u043d\u0430 \u0432\u044b\u0436\u0438\u0432\u0430\u043d\u0438\u0435’
print x.?(“utf-8”)
Офлайн
5
encode()/decode()
Отредактировано (Март 22, 2012 18:23:11)
Офлайн
0
Piton23А конкретнее?
encode()/decode()
x= '\u0418\u0433\u0440\u0430 \u043d\u0430 \u0432\u044b\u0436\u0438\u0432\u0430\u043d\u0438\u0435'
print x.encode("utf-8")
print x.decode("utf-8")
>>>
\u0418\u0433\u0440\u0430 \u043d\u0430 \u0432\u044b\u0436\u0438\u0432\u0430\u043d\u0438\u0435
\u0418\u0433\u0440\u0430 \u043d\u0430 \u0432\u044b\u0436\u0438\u0432\u0430\u043d\u0438\u0435
Офлайн
4
Это строка не в utf8, а в кодировке unicode-escape (откуда она такая взялась, кстати?)
>>> x= '\u0418\u0433\u0440\u0430 \u043d\u0430 \u0432\u044b\u0436\u0438\u0432\u0430\u043d\u0438\u0435'
>>> x
'\\u0418\\u0433\\u0440\\u0430 \\u043d\\u0430 \\u0432\\u044b\\u0436\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435'
>>> x.decode('unicode-escape')
u'\u0418\u0433\u0440\u0430 \u043d\u0430 \u0432\u044b\u0436\u0438\u0432\u0430\u043d\u0438\u0435'
>>> print x.decode('unicode-escape')
Игра на выживание
>>>
Офлайн
5
“А конкретнее?” А поэкспериментировать? )
Тут много вопросов, какая ось, откуда запускаете в idle или отдельным файлом в косоли. В win там замудренно все с кодировками (т.е. в консоли одна в файлах другая, смотря какую строку кодировки в начале файла укажешь) но решаемо
так то если строка в utf-8 и надо превратить в последовательность байтов (внутренняя структура питона вроде unicode) то нужно decode('utf')
если из последовательности байт в строку с кодировкой cp1251 то encode('cp1251')
Вроде ниче не напутал
Отредактировано (Март 23, 2012 07:19:24)
Офлайн
4
Piton23Строка в utf8 - это уже *последовательность байтов*. Это такая последовательность байтов, которую можно декодировать в символы юникода (в буквы, в текст) с помощью кодировки (==алгоритма) utf8.
так то если строка в utf-8 и надо превратить в последовательность байтов (внутренняя структура питона вроде unicode) то нужно decode('utf')
Piton23Из последовательности байт в строку в кодировке cp1251 (т.е. другую последовательность байт) нельзя получить, не зная кодировку исходной последовательности байт. Например, если нужно переконвертировать utf8-строку в 1251-строку, мы сначала декодируем utf8 в юникод, а потом кодируем юникод в 1251.
если из последовательности байт в строку с кодировкой cp1251 то encode('cp1251')
Офлайн
5
Ну немного ошибся в формулировке, не последовательность байт а юникод. Но суть то не изменилась, надо преобразовать ИЗ кодировки я пишу decode(), надо преобразовать В кодировку я пишу encode(), надо преобразовать ИЗ В пишу decode().encode(). Так что не придирайся :) я уже не мало дней потратил на их разбирательство.
Офлайн
0
kmikeСпасибо! Все заработало :) Взялась с белорусского медиа портала - API у них такое.
Это строка не в utf8, а в кодировке unicode-escape (откуда она такая взялась, кстати?)
Офлайн
0
Помогите, пожалуйста! Аналогичный вопрос, но ничего из описанного здесь не помогло. И поиск в гугле тоже.
Есть файл https://www.dropbox.com/s/ndtiyckowp81hsi/example.txt
Содержимое файла:
\\u0410\\u043b\\u0435\\u043a\\u0441\\u0430\\u043d\\u0434\\u0440
Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> x='\\u0410\\u043b\\u0435\\u043a\\u0441\\u0430\\u043d\\u0434\\u0440'
>>> print x.decode('unicode-escape')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-8: character maps to <undefined>
Отредактировано maxfox (Дек. 9, 2013 10:32:37)
Прикреплённый файлы:
example.txt (63 байта)
Офлайн
3
decode('unicode_escape') выдает то же самое, только на один слэш меньше в каждом символе.
Офлайн