Как URL-безопасное кодирование строки с помощью Python?и urllib.quote не так - PullRequest
3 голосов
/ 14 июня 2011

Здравствуйте, мне было интересно, знаете ли вы какой-либо другой способ кодирования строки в безопасном для URL, потому что urllib.quote делает это неправильно, вывод отличается от ожидаемого:

Если я попробую

urllib.quote ( 'A')

я получаю

'% C3% A1'

Но это не правильный вывод, он должен быть % E1

Как показывает инструмент, предоставленный здесь этот сайт

И это не для меня сложно, неправильный вывод цитаты мешает браузеру найти ресурсы, если я попытаюсь

urllib.quote ('\ images \ á \ some file.jpg')

А потом я пытаюсь с помощью инструмента javascript, который я упомянул, я получаю эти строки соответственно

* * +1034% 5Cimages% 5C% C3% A1% 5Csome% 20file.jpg * * тысяча тридцать пять

% 5Cimages% 5C% E1% 5Csome% 20file.jpg * +1037 *

Обратите внимание, что это почти то же самое, но URL, указанный в кавычке, не работает, а другой - работает. Я попытался возиться с кодировкой ('utf-8) в строке, указанной в кавычках, но это не имеет значения. Я пробовал с другими испанскими словами с акцентами и - они все представлены по-разному.

Это ошибка с питоном? Знаете ли вы какой-нибудь модуль, который понимает это правильно?

Ответы [ 5 ]

7 голосов
/ 14 июня 2011

Согласно RFC 3986 , %C3%A1 является правильным. Предполагается, что символы преобразуются в поток октетов с использованием UTF-8 до того, как поток октетов кодируется в процентах. Сайт, на который вы ссылаетесь, устарел.

См. Почему кодировка URL-адреса и части строки запроса различаются? для получения более подробной информации об истории обработки символов не-ASCII в URL-адресах.

3 голосов
/ 14 июня 2011

Хорошо, понял, мне нужно закодировать в iso-8859-1 вот так

0 голосов
/ 14 июня 2011

В этом вопросе кажется, что какой-то парень написал довольно большую функцию для преобразования в ascii urls, вот что мне нужно. Но я надеялся, что в std lib есть какой-то инструмент кодирования для этой работы.

0 голосов
/ 14 июня 2011

А как насчет использования юникодных строк и числового представления (ord) символа?

>>> print '%{0:X}'.format(ord(u'á'))
%E1
0 голосов
/ 14 июня 2011

Python интерпретируется в ASCII по умолчанию, поэтому даже если ваш файл может быть закодирован по-разному, ваш символ UTF-8 интерпретируется как два символа ASCII.

Попробуйте добавить комментарий в качестве первой из второй строкиваш код подобен этому, чтобы соответствовать кодировке файла, и вам может понадобиться также использовать u'á'.

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