Простой кодировка URL ASCII с питоном
-
29-09-2019 - |
Вопрос
посмотри на это:
import urllib
print urllib.urlencode(dict(bla='Ã'))
выход
bla=%C3%BC
Я хочу просто, я хочу вывод в ASCII вместо UTF-8, поэтому мне нужен вывод:
bla=%C3
Если я попробую:
urllib.urlencode(dict(bla='Ã'.decode('iso-8859-1')))
не работает (все мои файлы Python кодированы UTF-8):
'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
В производстве вход представлен единоличным.
Решение 5
Спасибо всем решениям. Все вы сходитесь к той же точке. Я сделал беспорядок, изменив правильный код
.encode('iso-8859-1')
к
.decode('iso-8859-1')
Поверните обратно в .encode ('iso-8859-1'), и он работает.
Другие советы
Посмотри на Транспорт Unicode в Python:
from unidecode import unidecode
print unidecode(u"\u5317\u4EB0")
# That prints: Bei Jing
В твоем случае:
bla='Ã'
print unidecode(bla)
'A'
Это сторонняя библиотека, которую можно легко установить через:
$ git clone http://code.zemanta.com/tsolc/git/unidecode
$ cd unidecode
$ python setup.py install
Я хочу вывод в ASCII вместо UTF-8
Это не ASCII, который не имеет символов, нанесенных на карту выше 0x80. Вы говорите об ISO-8859-1 или, возможно, кодовой странице 1252 (кодирование Windows на основе его).
'Ã'.decode('iso-8859-1')
Ну, это зависит от того, какую кодировку вы использовали для сохранения персонажа Ã
В источнике, не так ли? Похоже, ваш текстовый редактор сохранил его как UTF-8. (Это хорошо, потому что кодировки, специфичные для локализации, такие как ISO-8859-1, должны уйти как можно скорее.)
Скажите Python, что исходный файл, который вы сохранили, находится в UTF-8 в соответствии с PEP 263:
# coding=utf-8
urllib.quote(u'Ã'.encode('iso-8859-1')) # -> %C3
Или, если вы не хотите этой хлопоты, используйте спасение Backslash:
urllib.quote(u'\u00C3'.encode('iso-8859-1')) # -> %C3
Хотя в любом случае, современный веб-приложение должно использовать UTF-8 для его ввода, а не ISO-8859-1/CP1252.
Довольно хорошо работает уцификация так:
import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')
Если ваш ввод фактически является UTF-8, и вы хотите, чтобы ISO-8859-1 как вывод (который не является ASCII), что вам нужно:
'ñ'.decode('utf-8').encode('iso-8859-1')
Упаковка unihandecode
является
US-ASCII Транспорт текста Unicode.
Улучшенная версия Python Unidecode, то есть порт текста Python :: unidecode Perl Модуль Шона М. Берка.
pip install Unihandecode
затем в python
import unihandecode
print(unihandecode.unidecode(u'Ã'))
принты A
.