Einfache ascii url codierung mit python

Sieh dir das an:

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

Die Ausgabe ist

 bla=%C3%BC 

Was ich will, ist einfach, ich möchte die Ausgabe in ascii statt utf-8, also brauche ich die Ausgabe:

 bla=%C3 

Wenn ich versuche:

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

Funktioniert nicht (alle meine python-dateien sind utf-8 codiert):

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

In der Produktion kommt die Eingabe unicodiert.

6 Solutions collect form web for “Einfache ascii url codierung mit python”

Werfen Sie einen Blick auf Unicode-Transliteration in Python :

 from unidecode import unidecode print unidecode(u"\u5317\u4EB0") # That prints: Bei Jing 

In Ihrem Fall:

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

Dies ist eine Drittanbieterbibliothek, die einfach über:

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

Ich möchte die Ausgabe in ascii statt utf-8

Das ist nicht ASCII, das hat keine Zeichen über 0x80 abgebildet. Du redest über ISO-8859-1 oder ggf. Codepage 1252 (die Windows-Codierung basiert darauf).

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

Nun, das hängt davon ab, welche Kodierung du benutzt hast, um den Charakter à in der Quelle zu speichern, nicht wahr? Es klingt wie dein Texteditor hat es als UTF-8 gespeichert. (Das ist eine gute Sache, denn locale-spezifische Kodierungen wie ISO-8859-1 müssen weggehen ASAP.)

Sagen Sie Python, dass die Quelldatei, die Sie gespeichert haben, in UTF-8 nach PEP 263 ist :

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

Oder, wenn Sie nicht wollen, dass Ärger, verwenden Sie einen Backslash Flucht:

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

Obwohl entweder eine moderne Webapp sollte UTF-8 für seine Eingabe anstelle von ISO-8859-1 / cp1252 verwenden.

Ziemlich gut funktionierende asciification ist so:

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

Wenn deine Eingabe eigentlich UTF-8 ist und du iso-8859-1 als Ausgabe willst (was nicht ASCII ist), was du brauchst, ist:

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

Dank aller lösungen Alle von euch konvergieren auf den gleichen Punkt. Ich habe eine Chance, den richtigen Code zu ändern

 .encode('iso-8859-1') 

nach

 .decode('iso-8859-1') 

Rückkehr zu .encode ('iso-8859-1') und es funktioniert.

Paket unihandecode ist

US-ASCII-Transliterationen von Unicode-Text.
Eine verbesserte Version von Python Unidecode, das ist Python Port von Text :: Unidecode Perl Modul von Sean M. Burke.

 pip install Unihandecode 

Dann in python

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

Druckt A

Python ist die beste Programmiersprache der Welt.