2010-06-24 2 views
1

посмотреть на что:Простой ASCII URL кодирования с питона

import urllib 
print urllib.urlencode(dict(bla='Ã')) 

выход является

bla=%C3%BC 

, что я хочу, это просто, я хочу, вывод в формате ASCII вместо UTF-8, так что я нужен выход:

bla=%C3 

если я пытаюсь:

urllib.urlencode(dict(bla='Ã'.decode('iso-8859-1'))) 

не работает (все мои питона файлы UTF-8 закодированы):

'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

В производстве, вход приходит в кодировке unicode.

+0

A + тильда, преобразованная в ASCII (?), Равна 0xC3? я так не думаю – mykhal

+1

Возможно, стоит перефразировать название. ASCII не включает символ 'Ã'. –

+0

"bla =% C3% BC" не содержит символов, отличных от ASCII. Вам нужно объяснить, что вам действительно нужно или нужно, и почему вы считаете, что вам это нужно. –

ответ

0

благодаря всем решениям. все вы сходитесь к одной и той же точке. я напутал меняющийся правильный код

.encode('iso-8859-1') 

в

.decode('iso-8859-1') 

повернуть назад к .encode ('ISO-8859-1'), и она работает.

1

Если вход на самом деле UTF-8, и вы хотите ISO-8859-1 в качестве вывода (который не является ASCII), что вам нужно:

'ñ'.decode('utf-8').encode('iso-8859-1') 
2

Я хочу, чтобы вывод в формате 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 

Или, если вы не хотите, что хлопот, используйте обратную косую побег:

urllib.quote(u'\u00C3'.encode('iso-8859-1')) # -> %C3 

Несмотря на то, так или иначе, современный веб-приложение следует использовать UTF-8 для его ввода, а не ISO-8859- 1/cp1252.

+1

весь webapp уже является utf-8, но внешний веб-сервис, основанный на url, который я пытаюсь установить, не распознает% C3% BC, только% C3. ваше решение работает нормально. – bluefoot

2

довольно хорошо работает asciification это так:

import unicodedata 
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore') 
3

взглянуть на unicode transliteration in python:

from unidecode import unidecode 
print unidecode(u"\u5317\u4EB0") 

# That prints: Bei Jing 

В вашем случае:

bla='Ã' 
print unidecode(bla) 
'A' 

Это третий партийная библиотека ary, который может быть легко установлен через:

$ git clone http://code.zemanta.com/tsolc/git/unidecode 
$ cd unidecode 
$ python setup.py install 
0

Пакет unihandecode является

US-ASCII транслитерации текста Unicode.
улучшенная версия Unidecode Python, то есть порт Python модуля Text :: Unidecode Perl от Шона М. Берка.

pip install Unihandecode 

тогда в python

import unihandecode 
print(unihandecode.unidecode(u'Ã')) 

отпечатков A.

Смежные вопросы