Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 27, 2013 11:59:18

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

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

Я вчера ночью, видимо, перепутал строки и в сообщении №1 строка urldecoded не соответствует второй строке, в первой, действительно, “сахалин”, а во второй “лотывлоат”.. Но проблема не в том
Вот код, который полностью развеет все сомнения

>>> str_from_file = '{"url": "http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213"}'
>>> json_obj = json.loads(str_from_file)
>>> json_obj
{u'url': u'http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213'}
>>> url = json_obj['url']
>>> url
u'http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213'
>>> import urllib
>>> urldecoded = urllib.unquote(url)
>>> urldecoded
u'http://yandex.ru/yandsearch?text=\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0&lr=213'
И проблема в том, как привести вот эту итоговую строку urldecoded к виду 'http://yandex.ru/yandsearch?text=москва&lr=213'
Ну или что я делаю не так?

Отредактировано skavans (Авг. 27, 2013 12:02:16)

Офлайн

#2 Авг. 27, 2013 12:04:35

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

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

print u'http://yandex.ru/yandsearch?text=\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0&lr=213'.encode('latin1').decode('utf-8')
# http://yandex.ru/yandsearch?text=москва&lr=213



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

Офлайн

#3 Авг. 27, 2013 12:08:34

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

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

#1
:)
Школьники говорите…



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

Офлайн

#4 Авг. 27, 2013 12:18:24

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

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

# urldecoded = urllib.unquote(url)
urldecoded = urllib.unquote(str(url))
#urldecoded
urldecoded.decode('utf-8')



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

Офлайн

#5 Авг. 27, 2013 12:20:28

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

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

Проще…

import urllib
url='http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213'
print urllib.unquote(url).decode('utf8')



Офлайн

#6 Авг. 27, 2013 12:21:05

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

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

wbt
Я опоздал :)
Пока набирал :)



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

Офлайн

#7 Авг. 27, 2013 12:23:23

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

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

4kpt
url='http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213'

у него получается

u'http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213'

а не

'http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213'

собственно, это и есть основная проблема



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

Офлайн

#8 Авг. 27, 2013 12:27:13

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

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

Опять я что-то не врубился.

import json
import urllib
str_from_file = '{"url": "http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213"}'
json_obj = json.loads(str_from_file)
print json_obj
url = json_obj['url']
print url
urldecoded = urllib.unquote(url).decode("utf-8")
print urldecoded
Итог
>>> 
{'url': 'http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213'}
http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213
http://yandex.ru/yandsearch?text=москва&lr=213
>>> 



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

Офлайн

#9 Авг. 27, 2013 12:29:03

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

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

wbt, так получилось, спасибо. Не догадался изначальный URL привести к str… Интересно, почему сам питон в результате выдает невалидный объект такой.

Офлайн

#10 Авг. 27, 2013 12:30:37

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

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

Что-то здесь не то :)

import json
import urllib
str_from_file = '{"url": "http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213"}'
json_obj = json.loads(str_from_file)
print json_obj
url = json_obj['url']
print type(url)

Получаем

{'url': 'http://yandex.ru/yandsearch?text=%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&lr=213'}
<type 'str'>



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version