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.

War es hilfreich?

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

unihandecode

  

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top