Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2012 17:50:06

Silen
От:
Зарегистрирован: 2012-03-22
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

Посоветуйте PLZ как декодировать строку содержащую коды unicode?

x= ‘\u0418\u0433\u0440\u0430 \u043d\u0430 \u0432\u044b\u0436\u0438\u0432\u0430\u043d\u0438\u0435’
print x.?(“utf-8”)



Офлайн

#2 Март 22, 2012 18:13:51

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

encode()/decode()

Отредактировано (Март 22, 2012 18:23:11)

Офлайн

#3 Март 22, 2012 18:32:54

Silen
От:
Зарегистрирован: 2012-03-22
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

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 Март 22, 2012 21:45:50

kmike
От:
Зарегистрирован: 2009-12-07
Сообщения: 56
Репутация: +  4  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

Это строка не в 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 Март 23, 2012 05:21:03

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

“А конкретнее?” А поэкспериментировать? )
Тут много вопросов, какая ось, откуда запускаете в idle или отдельным файлом в косоли. В win там замудренно все с кодировками (т.е. в консоли одна в файлах другая, смотря какую строку кодировки в начале файла укажешь) но решаемо

так то если строка в utf-8 и надо превратить в последовательность байтов (внутренняя структура питона вроде unicode) то нужно decode('utf')
если из последовательности байт в строку с кодировкой cp1251 то encode('cp1251')
Вроде ниче не напутал

Отредактировано (Март 23, 2012 07:19:24)

Офлайн

#6 Март 23, 2012 10:02:23

kmike
От:
Зарегистрирован: 2009-12-07
Сообщения: 56
Репутация: +  4  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

Piton23
так то если строка в utf-8 и надо превратить в последовательность байтов (внутренняя структура питона вроде unicode) то нужно decode('utf')
Строка в utf8 - это уже *последовательность байтов*. Это такая последовательность байтов, которую можно декодировать в символы юникода (в буквы, в текст) с помощью кодировки (==алгоритма) utf8.

Piton23
если из последовательности байт в строку с кодировкой cp1251 то encode('cp1251')
Из последовательности байт в строку в кодировке cp1251 (т.е. другую последовательность байт) нельзя получить, не зная кодировку исходной последовательности байт. Например, если нужно переконвертировать utf8-строку в 1251-строку, мы сначала декодируем utf8 в юникод, а потом кодируем юникод в 1251.



Офлайн

#7 Март 23, 2012 10:51:02

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

Ну немного ошибся в формулировке, не последовательность байт а юникод. Но суть то не изменилась, надо преобразовать ИЗ кодировки я пишу decode(), надо преобразовать В кодировку я пишу encode(), надо преобразовать ИЗ В пишу decode().encode(). Так что не придирайся :) я уже не мало дней потратил на их разбирательство.

Офлайн

#8 Март 23, 2012 13:37:20

Silen
От:
Зарегистрирован: 2012-03-22
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

kmike
Это строка не в utf8, а в кодировке unicode-escape (откуда она такая взялась, кстати?)
Спасибо! Все заработало :) Взялась с белорусского медиа портала - API у них такое.



Офлайн

#9 Дек. 9, 2013 10:12:38

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

Помогите, пожалуйста! Аналогичный вопрос, но ничего из описанного здесь не помогло. И поиск в гугле тоже.
Есть файл https://www.dropbox.com/s/ndtiyckowp81hsi/example.txt
Содержимое файла:

\\u0410\\u043b\\u0435\\u043a\\u0441\\u0430\\u043d\\u0434\\u0440
decode('unicode_escape') выдает то же самое, только на один слэш меньше в каждом символе.

Надо привести файл в читабельный вид. Совершенно не представляю, что делать.
Windows, Python 2.7.

PS
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)

Прикреплённый файлы:
attachment example.txt (63 байта)

Офлайн

#10 Дек. 9, 2013 10:58:47

TroSer
От: Харьков
Зарегистрирован: 2013-11-13
Сообщения: 65
Репутация: +  3  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

decode('unicode_escape') выдает то же самое, только на один слэш меньше в каждом символе.

у меня ваш пример запустился, строку “Александр” печатает

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version