Как открыть URL без аргументов utf-8

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

Спасибо

3 ответа

Решение

Параметры строки запроса основаны на байтах. В то время как символы 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')

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

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

У вас есть кодирование любых данных, которые вы имеете через base64.b64encode с помощью -_ как альтернативный символ, чтобы URL был безопасным в качестве опции. Смотрите здесь.

Другие вопросы по тегам