Einfache ascii URL-Codierung mit Python
-
29-09-2019 - |
Frage
Blick auf das:
import urllib
print urllib.urlencode(dict(bla='Ã'))
ist der Ausgang
bla=%C3%BC
, was ich will, ist einfach, ich die Ausgabe in ascii wollen statt utf-8, so muss ich die Ausgabe:
bla=%C3
, wenn ich versuche:
urllib.urlencode(dict(bla='Ã'.decode('iso-8859-1')))
nicht funktioniert (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 der Eingang unicodierten.
Lösung 5
Dank an alle Lösungen. sie alle konvergieren zu dem gleichen Punkt. Ich habe ein Chaos um den richtigen Code zu ändern
.encode('iso-8859-1')
.decode('iso-8859-1')
zurückdrehen zu .encode ( 'iso-8859-1') und es funktioniert.
Andere Tipps
Hier finden Sie aktuelle Unicode-Umschrift 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 Dritte-Bibliothek, die leicht über installiert werden kann:
$ 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, die keine Zeichen über 0x80 abgebildet hat. Sie sprechen von ISO-8859-1 oder möglicherweise Codepage 1252 (die Windows-Kodierung auf ihr basiert).
'Ã'.decode('iso-8859-1')
Nun, das hängt davon ab, welche Codierung Sie verwendet haben den Charakter Ã
in der Quelle zu retten, nicht wahr? Es klingt wie Sie Ihren Text-Editor als UTF-8 gespeichert. (Das ist eine gute Sache, weil länderspezifische Codierungen wie ISO-8859-1 Bedarf so schnell wie möglich weg.)
Python sagen, dass die Quelldatei gespeichert haben in UTF-8 ist gemäß PEP 263 :
# coding=utf-8
urllib.quote(u'Ã'.encode('iso-8859-1')) # -> %C3
Oder, wenn Sie nicht das antun wollen, verwenden Sie einen umgekehrten Schrägstrich Flucht:
urllib.quote(u'\u00C3'.encode('iso-8859-1')) # -> %C3
Obwohl, so oder so, sollte ein moderne Webapp UTF-8 verwendet für seine Eingabe statt ISO-8859-1 / cp1252.
ziemlich gut asciification Arbeit ist auf diese Weise:
import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')
Wenn Sie Ihre Eingabe ist tatsächlich UTF-8 und Sie wollen iso-8859-1 als Ausgabe (die nicht ASCII ist), was Sie brauchen, ist:
'ñ'.decode('utf-8').encode('iso-8859-1')
US-ASCII-Transkriptionen von Unicode-Text.
eine verbesserte Version von Python unidecode, der Python-Port von Text ist :: Unidecode Perl-Modul von Sean M. Burke.
pip install Unihandecode
dann in python
import unihandecode
print(unihandecode.unidecode(u'Ã'))
druckt A
.