как открыть URL без аргументов utf-8 - PullRequest
0 голосов
/ 01 ноября 2009

При использовании Python мне нужно перенести данные, не закодированные в utf-8 (особенно shift-jis), в URL через строку запроса. Как я должен передать данные? Цитировать это? Кодировать в utf-8?

Спасибо

Ответы [ 3 ]

4 голосов
/ 01 ноября 2009

Параметры строки запроса основаны на байтах. В то время как символы IRI-to-URI и напечатанные символы не ASCII обычно используют UTF-8, ничто не заставляет вас отправлять или получать ваши собственные параметры в этой кодировке.

То же самое для Shift-JIS (обычно это cp932, расширение этой кодировки для Windows):

foo= u'\u65E5\u672C\u8A9E' # 日本語
url= 'http://www.example.jp/something?foo='+urllib.quote(foo.encode('cp932'))

В Python 3 вы делаете это в самой функции цитаты:

foo= '\u65E5\u672C\u8A9E'
url= 'http://www.example.jp/something?foo='+urllib.parse.quote(foo, encoding= 'cp932')
1 голос
/ 01 ноября 2009

Я не знаю, при чем здесь юникод, поскольку строка запроса представляет собой строку байтов. Вы можете использовать функции цитирования в urllib , чтобы заключать простые строки в кавычки, чтобы их можно было передавать в строках запроса.

0 голосов
/ 01 ноября 2009

Под «строкой запроса» вы подразумеваете HTTP GET, как в http:/{URL}?data=XYZ?

Вы кодируете все свои данные через base64.b64encode, используя -_ в качестве альтернативного символа, чтобы URL-адрес был безопасным в качестве опции. Смотри здесь .

...