Wie Normalisierung Unicode-Encoding für iso-8859-15 Umwandlung in Python?

Ich möchte Unicode-String in iso-8859-15 konvertieren. Diese Zeichenfolgen beinhalten das u"\u2019" (RIGHT SINGLE QUOTATION MARK siehe http://www.fileformat.info/info/unicode/char/2019/index.htm ) Zeichen, das nicht Teil der iso-8859-15 Zeichen ist Set.

In Python, wie man die Unicode-Zeichen normalisiert, um die iso-8859-15-Codierung anzupassen?

Ich habe das Unicodedata-Modul ohne Erfolg gesehen. Ich schaffe es, den Job zu machen

 s.replace(u"\u2019", "'").encode('iso-8859-15') 

Aber ich möchte einen allgemeineren und saubereren Weg finden.

Danke für Ihre Hilfe

3 Solutions collect form web for “Wie Normalisierung Unicode-Encoding für iso-8859-15 Umwandlung in Python?”

Verwenden Sie die Unicode-Version der translate Funktion, vorausgesetzt, s ist eine Unicode-Zeichenfolge:

 s.translate({ord(u"\u2019"):ord(u"'")}) 

Das Argument der Unicode-Version von translate ist ein dict-Mapping Unicode-Ordinals zu Unicode-Ordinals. Fügen Sie diesem Dict andere Zeichen hinzu, die Sie in Ihrer Zielcodierung nicht codieren können.

Sie können Ihre Mapping-Tabelle in ein wenig mehr lesbare Form zu erstellen und erstellen Sie Ihre Mapping dict aus, zum Beispiel:

 char_mappings = [(u"\u2019", u"'"), (u"`", u"'")] translate_mapping = {ord(k):ord(v) for k,v in char_mappings} 

Von übersetzdokumentation:

Bei Unicode-Objekten akzeptiert die translate () -Methode das optionale deletechars-Argument nicht. Stattdessen gibt es eine Kopie der s zurück, wo alle Zeichen durch die vorgegebene Übersetzungstabelle abgebildet wurden, die eine Zuordnung von Unicode-Ordinals zu Unicode-Ordinals, Unicode-Strings oder None sein muss. Unmapped Zeichen bleiben unberührt. Zeichen, die auf Keine zugeordnet sind, werden gelöscht. Beachten Sie, dass ein flexiblerer Ansatz ist, einen benutzerdefinierten Zeichenzuordnungscodec mit dem Codecs-Modul zu erstellen (siehe encodings.cp1251 für ein Beispiel).

Es sei denn, Sie möchten eine Übersetzungsregel erstellen (wenn Sie dies tun, schauen Sie sich die Antwort von Boud an), können Sie eine der Standard-Fehlerbehandlungscodes auswählen oder sogar eine eigene registrieren:

 In [4]: u'\u2019 Hi'.encode('iso-8859-15', 'replace') Out[4]: '? Hi' In [5]: u'\u2019 Hi'.encode('iso-8859-15', 'ignore') Out[5]: ' Hi' In [6]: u'\u2019 Hi'.encode('iso-8859-15', 'xmlcharrefreplace') Out[6]: '’ Hi' 

Von encode docstring:

S.encode ([encoding [, errors]]) -> string oder unicode

Encodes S mit dem Codec, der für die Codierung registriert ist. Codierung standardmäßig auf die Standard-Codierung. Es können Fehler gegeben werden, um ein anderes Fehlerbehandlungsschema festzulegen. Standard ist "streng" bedeutet, dass Kodierungsfehler einen UnicodeEncodeError aufheben. Weitere mögliche Werte sind 'ignore', 'replace' und 'xmlcharrefreplace' sowie jeder andere Name, der bei codecs.register_error registriert ist, der UnicodeEncodeErrors verarbeiten kann.

Für Info, meine endgültige Lösung:

 iso885915_utf_map = { u"\u2019": u"'", u"\u2018": u"'", u"\u201c": u'"', u"\u201d": u'"', } utf_map = dict([(ord(k), ord(v)) for k,v in iso885915_utf_map.items()]) s.translate(utf_map).encode('iso-8859-15') 

Danke für Ihre Hilfe

  • Python check if utf-8 string ist Großbuchstaben
  • Wie kann ich utf-8 Inhalte in einer urllib2-Anfrage senden?
  • Python, scrapy: schlechtes utf8 Zeichen in Datei geschrieben von gekratzten HTML-Seite mit Zeichensatz iso-8859-1
  • Python, Encoding Ausgabe an UTF-8
  • Python zlib Ausgabe, wie man aus mysql utf-8 Tabelle wiederherstellen?
  • Türkische Zeichenkodierung
  • UTF-8 und os.listdir ()
  • UnicodeDecodeError im PyCharm-Debugger
  • SQLAlchemy Text Zusammenpassende Daten im JSON-Feld mit UTF-8
  • Wie bekomme ich email.Header.decode_header, um mit Nicht-ASCII-Zeichen zu arbeiten?
  • Probleme mit der Encoding in Eclipse Console und Python
  • Python ist die beste Programmiersprache der Welt.