Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 27, 2013 11:14:08

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

К чему Вы вообще приплели эту строку?

xd0\xbb\xd0\xbe\xd1\x82\xd1\x8b\xd0\xb2\xd0\xbb\xd0\xbe\xd0\xb0\xd1\x82

Речь шла о декодировании строки

%D1%81%D0%B0%D1%85%D0%B0%D0%BB%D0%B8%D0%BD

Так вот в этой строке зашито слово

сахалин

После Вашего декодирования получилось слово

лотывлоат

Вас ничего не смущает?



Отредактировано 4kpt (Авг. 27, 2013 11:17:46)

Офлайн

#2 Авг. 27, 2013 11:19:55

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

4kpt
К чему Вы вообще приплели эту строку?

Это была единственная строка в исходном сообщении, которую можно было сразу скопировать и вставить.

Причём здесь вообще url-декодирование? Оно и вернёт байт-строку, в python2 оно не возвращает unicode, насколько я помню, и поэтому, лучше, конечно, декодировать её сразу после получения в unicode, чтобы потом не было мучительно больно.

Но проблема именно в том, что оно “как есть” считалось с флагом типа unicode, не будучи при этом unicode. Именно эту проблему мы и решали, удаляли флаг unicode. А слово “контакты” я получил даже не с помощью unquote, а с помощью .replace('%',r'\x'). Это не потому, что это правильная запись, а потому что процесс деэскейпирования тут никого не интересует, он очевиден. Автора интересовала проблема приведения типов к конституционному порядку.



Бейсик - не порок, Гвидо - не пророк

Офлайн

#3 Авг. 27, 2013 11:23:39

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

wbt
Автора интересовала проблема приведения типов к конституционному порядку

Да Вы что?

skavans
1) как из этого объекта получить нормальную читаемую строку;
2) в чем вообще причина такой ошибки.

Не похоже :)



Отредактировано 4kpt (Авг. 27, 2013 11:27:52)

Офлайн

#4 Авг. 27, 2013 11:29:42

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

Автор получил через unquote объект. Тут он бы мог им пользоваться по своему разумению, и не было бы никакой проблемы.

Но автор решил их себе создать. Он вот эту ‘\xxx’ братию сохранил в json. А затем - прочитал. И читалка ему повесила, чтобы жизнь раем не казалась, флаг u. Без этого флага у автора не было бы проблемы и не было бы этой темы.

1) как из этого объекта получить нормальную читаемую строку;2) в чем вообще причина такой ошибки.

Вот имено. Из объекта с u'\xxx', который он получил. А не из %D0, из которой получить строку может каждый школьник. Потому что тривиальным .decode такая u\xстрока не раскодируется, что я и показал в примерах выше.

Неужели так сложно прочитать исходное сообщение полностью и провести причинно-следственные связи?



Бейсик - не порок, Гвидо - не пророк

Офлайн

#5 Авг. 27, 2013 11:38:47

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

Прошу меня простить. Видимо я не понимаю такого декодирования…

Изначальные данные “сахалин” превратились в “лотывлоат” путем сложный и очень нужных преобразований.

1. Какую пробелму Вы решали?
2. Какое решение получили?
3. Совпадают ли ожидания?

P.S. Я пас. Дальше продолжать бессмысленно.



Офлайн

#6 Авг. 27, 2013 11:40:27

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

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

Возникла странная проблема: есть файл в формате JSON, в нем, в одном из полей есть URL, который содержит кириллицу в виде search?q=%D1%81%D0%B0%D1%85%D0%B0%D0%BB%D0%B8%D0%BD.
Далее с помощью json.load() создаю dict из него, делаю urllib.unquote() и получаю вот такой объект u'\xd0\xbb\xd0\xbe\xd1\x82\xd1\x8b\xd0\xb2\xd0\xbb\xd0\xbe\xd0\xb0\xd1\x82'.
Если честно, не могу сказать, что на все 100% понял, как работать с кодировками и encode/decode, но судя по всему, это неправильный объект - utf-escaped строка лежит в unicode-строке..
В связи с этим, прошу помощи в 2 вопросах:
1) как из этого объекта получить нормальную читаемую строку;
2) в чем вообще причина такой ошибки.



Бейсик - не порок, Гвидо - не пророк

Офлайн

#7 Авг. 27, 2013 11:49:00

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

Тогда это:

Очень интересная и бессмысленная задача :)

P.S. Приношу свои извинения. Я понял не так. Я думал, что имелась ввиду начальная строка….



Офлайн

#8 Авг. 27, 2013 11:50:38

skavans
Зарегистрирован: 2012-11-13
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

Суть проблемы, действительно, сводится к получению нормальной читаемой строки из u'\xd0\xbb\xd0\xbe\xd1\x82\xd1\x8b\xd0\xb2\xd0\xbb\xd0\xbe\xd0\xb0\xd1\x82'. Не столь важно, сахалин в ней записан или лотывлоат там какие-то русские буквы.

Офлайн

#9 Авг. 27, 2013 11:54:42

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

skavans
Суть проблемы, действительно, сводится к получению нормальной читаемой строки из u'\xd0\xbb\xd0\xbe\xd1\x82\xd1\x8b\xd0\xb2\xd0\xbb\xd0\xbe\xd0\xb0\xd1\x82'. Не столь важно, сахалин в ней записан или лотывлоат там какие-то русские буквы.

Это все поняли. Ну… почти все.

Сообщение #6. Не знаю, насколько это правильно теоретически, но работает.



Бейсик - не порок, Гвидо - не пророк

Офлайн

#10 Авг. 27, 2013 11:58:54

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

utf8-escaped в unicode-строке

wbt
Это все поняли. Ну… почти все.
Примите мои поздравления….



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version