Найти - Пользователи
Полная версия: utf8-escaped в unicode-строке
Начало » Python для экспертов » utf8-escaped в unicode-строке
1 2 3 4
skavans
Я вчера ночью, видимо, перепутал строки и в сообщении №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'
Ну или что я делаю не так?
wbt
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
4kpt
#1
:)
Школьники говорите…
wbt
# urldecoded = urllib.unquote(url)
urldecoded = urllib.unquote(str(url))
#urldecoded
urldecoded.decode('utf-8')
4kpt
Проще…
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')
4kpt
wbt
Я опоздал :)
Пока набирал :)
wbt
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'

собственно, это и есть основная проблема
4kpt
Опять я что-то не врубился.
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
>>> 
skavans
wbt, так получилось, спасибо. Не догадался изначальный URL привести к str… Интересно, почему сам питон в результате выдает невалидный объект такой.
4kpt
Что-то здесь не то :)

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'>
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