Строка Python и проблемы UTF-8 - PullRequest
2 голосов
/ 05 августа 2011

Я программирую скрипт, который будет получать некоторые данные с моего сайта, используя http GET.

Моя проблема в том, что я должен передавать символы Юникода на сайт.

Я читаю файл, содержащий эти символы, а затем пытаюсь создать URL для выполнения запроса.

Файл имеет кодировку utf-8, и я использую его для чтения из него

f = codecs.open("values.txt", encoding='utf-8')

Затем я читаю первую строку файла и объединяю значение с URL

sUrl = "http://example.com?word="
value = f.readline()
visitUrl = sUrl + value

если я использую print visitUrl, вывод правильный. то есть http://example.com? word = π

Как использовать visiUrl, не уничтожая моих специальных символов? Я пытался закодировать строку в ascii, но она не работает для всех символов.

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Цитата URL

import urllib
s = u'Здравей'
urllib.quote(s.encode('utf-8'))
# %D0%97%D0%B4%D1%80%D0%B0%D0%B2%D0%B5%D0%B9

или используйте urlencode непосредственно для построения части запроса URL

urllib.urlencode({'data': s.encode('utf-8')})
# 'data=%D0%97%D0%B4%D1%80%D0%B0%D0%B2%D0%B5%D0%B9'
1 голос
/ 05 августа 2011

Создайте URL с помощью urllib.urlencode , а не пытайтесь создать его путем объединения строк. Не-ASCII символы в URL должны быть закодированы в URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...