Найти - Пользователи
Полная версия: utf8-escaped в unicode-строке
Начало » Python для экспертов » utf8-escaped в unicode-строке
1 2 3 4
4kpt
К чему Вы вообще приплели эту строку?

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

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

сахалин

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

лотывлоат

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

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

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

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

Да Вы что?

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

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

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

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

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

Неужели так сложно прочитать исходное сообщение полностью и провести причинно-следственные связи?
4kpt
Прошу меня простить. Видимо я не понимаю такого декодирования…

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

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

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

Возникла странная проблема: есть файл в формате 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) в чем вообще причина такой ошибки.
4kpt
Тогда это:

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

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

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

Сообщение #6. Не знаю, насколько это правильно теоретически, но работает.
4kpt
wbt
Это все поняли. Ну… почти все.
Примите мои поздравления….
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB