Вопрос

посмотри на это:

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top