Question

regard sur ce qui suit:

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.

Était-ce utile?

La solution 5

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

.encode('iso-8859-1') 

à

.decode('iso-8859-1')

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

Autres conseils

Jetez un oeil à unicode translittération en python :

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

# That prints: Bei Jing

Dans votre cas:

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

Ceci est une bibliothèque tierce partie, qui peut être facilement installé via:

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

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

Ce n'est pas ASCII, qui n'a pas de caractères mis en correspondance au-dessus 0x80. Vous parlez ISO-8859-1, ou peut-être la page de code 1252 (Windows codage par dessus).

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

Eh bien cela dépend de ce que vous avez encodage utilisé pour enregistrer le à de caractères dans la source, non? Il semble que votre éditeur de texte a enregistré en tant que UTF-8. (C'est une bonne chose, parce que les encodages spécifiques des 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 anti-slash:

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.

assez bien asciification travail est ainsi:

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

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')

unihandecode est

  

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

pip install Unihandecode

puis dans python

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

imprime A.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top