Ich habe Text, der Unicode-Interpunktion verwendet, wie z. B. linkes doppeltes Anführungszeichen, rechtes einfaches Anführungszeichen für Apostroph usw., und ich benötige ihn in ASCII. Verfügt Python über eine Datenbank dieser Zeichen mit offensichtlichen ASCII-Ersatzzeichen, sodass ich es besser machen kann, als sie alle in "?" ?
84
Antworten:
Unidecode sieht aus wie eine Komplettlösung. Es konvertiert ausgefallene Anführungszeichen in ASCII-Anführungszeichen, lateinische Zeichen mit Akzent in nicht akzentuierte Anführungszeichen und versucht sogar, mit Zeichen zu arbeiten, die keine ASCII-Entsprechungen haben. Auf diese Weise müssen Ihre Benutzer nicht viele sehen? wenn Sie ihren Text durch ein altes 7-Bit-ASCII-System leiten mussten.
http://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/
quelle
s/ö/oe/
usw.), bevor Sie den Rest mit bereinigenunidecode
.ä -> a
,ö -> o
völlig falsch ist, ist es immer noch besser,ae
undoe
In meiner ursprünglichen Antwort schlug ich auch vor
unicodedata.normalize
. Ich habe mich jedoch entschlossen, es auszuprobieren, und es stellte sich heraus, dass es mit Unicode-Anführungszeichen nicht funktioniert. Es macht einen guten Job beim Übersetzen von Unicode-Zeichen mit Akzent, daher schätze ich, dass esunicodedata.normalize
mit derunicode.decomposition
Funktion implementiert wird , was mich zu der Annahme führt, dass es wahrscheinlich nur Unicode-Zeichen verarbeiten kann, die Kombinationen aus Buchstaben und diakritischen Zeichen sind, aber ich bin es nicht wirklich ein Experte für die Unicode-Spezifikation, also könnte ich einfach voller heißer Luft sein ...In jedem Fall können Sie
unicode.translate
stattdessen Interpunktionszeichen verwenden. Dietranslate
Methode verwendet ein Wörterbuch von Unicode-Ordnungszahlen zu Unicode-Ordnungszahlen. Daher können Sie eine Zuordnung erstellen, die nur Unicode-Interpunktion in ASCII-kompatible Interpunktion übersetzt:Sie können bei Bedarf weitere Interpunktionszuordnungen hinzufügen, aber ich denke, Sie müssen sich nicht unbedingt um die Behandlung jedes einzelnen Unicode-Interpunktionszeichens kümmern. Wenn Sie tun , um Griff Akzente und andere diakritische Zeichen benötigen, können Sie immer noch verwenden ,
unicodedata.normalize
mit diesen Zeichen zu behandeln.quelle
Interessante Frage.
Google hat mir geholfen, diese Seite zu finden, die mit dem Unicodedata-Modul wie folgt beschrieben wird:
quelle
Weitere Informationen hierzu finden Sie unter http://code.activestate.com/recipes/251871/. Dort finden Sie die NFKD-Lösung und einige Möglichkeiten zum Erstellen einer Konvertierungstabelle für Dinge wie ± => +/- und andere Nicht-Buchstaben-Zeichen.
quelle