encodage simple url ascii avec python
-
29-09-2019 - |
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.
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
.