2010-06-24 6 views
1

à ce:encodage simple url ascii avec un look python

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

la sortie est

bla=%C3%BC 

ce que je veux est simple, je veux la sortie en ascii au lieu de utf-8, donc je besoin de la sortie:

bla=%C3 

si je tente:

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

ne fonctionne pas (tous mes fichiers python sont utf-8 codé):

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

Dans la production, l'entrée VIENT unicode.

+0

Un + tilde converti en ASCII (?) Est 0xC3? Je ne pense pas – mykhal

+1

Il pourrait être utile de reformuler le titre. ASCII n'inclut pas un caractère 'Ã'. –

+0

"bla =% C3% BC" ne contient aucun caractère non-ASCII. Vous devez expliquer ce que vous voulez vraiment/besoin et pourquoi vous pensez que vous en avez besoin. –

Répondre

0

grâce à toutes les solutions. tous convergent vers le même point.Je fait un gâchis de changer le bon code

.encode('iso-8859-1') 

à

.decode('iso-8859-1') 

demi-tour à .encode ('iso-8859-1) et il fonctionne.

1

Si votre entrée est en fait UTF-8 et que vous voulez iso-8859-1 en sortie (qui ne sont pas ASCII) ce que vous avez besoin est:

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

Je veux que la sortie en ascii au lieu de utf-8

Ce n'est pas ASCII, qui n'a aucun caractère mappé au-dessus de 0x80. Vous parlez de ISO-8859-1, ou éventuellement de la page de code 1252 (le codage Windows basé dessus).

'Ã'.decode('iso-8859-1') 

Eh bien cela dépend de ce que vous avez l'encodage utilisé pour enregistrer le caractère à dans la source, non? Il semble que votre éditeur de texte l'ait sauvegardé en UTF-8. (C'est une bonne chose, parce que les encodages spécifiques aux paramètres régionaux comme besoin ISO-8859-1 pour aller loin le plus tôt possible.)

Dites Python que le fichier source que vous avez enregistré est en UTF-8 par PEP 263:

# coding=utf-8 

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

Ou, si vous ne voulez pas ce tracas, utilisez une évasion backslash:

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

Bien que, de toute façon, une webapp moderne devrait utiliser UTF-8 pour son entrée plutôt que ISO-8859- 1/cp1252.

+1

l'application Web entière est déjà utf-8, mais le service Web basé sur l'URL externe que j'essaie de communiquer ne reconnaît pas% C3% BC, seulement% C3. Votre solution fonctionne bien. – bluefoot

2

assez bien fonctionner asciification est ainsi:

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

Jetez un oeil à unicode transliteration in python:

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

# That prints: Bei Jing 

Dans votre cas:

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

Ceci est un troisième fête libr ary, qui peut être facilement installé via:

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

Package unihandecode est

translittération US-ASCII de texte Unicode.
une version améliorée de Python unidecode, c'est le port Python du module Perl Text :: Unidecode par Sean M. Burke.

pip install Unihandecode 

puis dans python

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

impressions A.