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 es unicodedata.normalize
mit der unicode.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. Die translate
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:
'Maps left and right single and double quotation marks'
'into ASCII single and double quotation marks'
>>> punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
>>> teststring = u'\u201Chello, world!\u201D'
>>> teststring.translate(punctuation).encode('ascii', 'ignore')
'"hello, world!"'
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.