Konvertieren von Unicode-Zeichen in ASCII-String in Python
Unicode-Zeichen ist der globale Codierungsstandard für Zeichen für alle Sprachen. Im Gegensatz zu ASCII, das nur ein einziges Byte pro Zeichen unterstützt, erweitern Unicode-Zeichen diese Funktion auf 4 Byte, sodass mehr Zeichen in jeder Sprache unterstützt werden.
Dieses Tutorial zeigt, wie Unicode-Zeichen in eine ASCII-Zeichenkette konvertiert werden. Ziel ist es, entweder die Zeichen zu entfernen, die in ASCII nicht unterstützt werden, oder die Unicode-Zeichen durch das entsprechende ASCII-Zeichen zu ersetzen.
Verwenden Sie unicodedata.normalize()
und encode()
, um Unicode in Python in einen ASCII-String zu konvertieren
Das Python-Modul unicodedata
bietet eine Möglichkeit, die Datenbank mit Zeichen in Unicode- und Dienstprogrammfunktionen zu verwenden, die den Zugriff, das Filtern und das Nachschlagen dieser Zeichen erheblich erleichtern.
unicodedata
hat eine Funktion namens normalize()
, die zwei Parameter akzeptiert, die normalisierte Form der Unicode-Zeichenkette und die angegebene Zeichenkette.
Es gibt 4 Arten normalisierter Unicode-Formen: NFC
, NFKC
, NFD
und NFKD
. Um mehr darüber zu erfahren, steht die offizielle Dokumentation für eine gründliche und ausführliche Erläuterung der einzelnen Typen zur Verfügung. Das normalisierte Formular NFKD
wird in diesem Lernprogramm verwendet.
Deklarieren wir eine Zeichenkette mit mehreren Unicode-Zeichen.
import unicodedata
stringVal = u"Här är ett exempel på en svensk mening att ge dig."
print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore"))
Verketten Sie nach dem Aufruf der Methode normalize()
die Funktion encode()
, die die Konvertierung von Unicode nach ASCII durchführt.
Das Zeichen u
vor dem Zeichenkettenwert hilft Python zu erkennen, dass der Zeichenkettenwert Unicode-Zeichen enthält. Dies erfolgt aus Gründen der Typensicherheit.
Der erste Parameter gibt den Konvertierungstyp an, und der zweite Parameter erzwingt, was zu tun ist, wenn ein Zeichen nicht konvertiert werden kann. In diesem Fall übergibt der 2. Parameter ignore
, wodurch alle Zeichen ignoriert werden, die nicht konvertiert werden können.
Ausgabe:
b'Har ar ett exempel pa en svensk mening att ge dig.'
Beachten Sie, dass die Unicode-Zeichen aus der ursprünglichen Zeichenkette (ä
und å
) durch das Gegenstück zu ASCII-Zeichen (a
) ersetzt wurden.
Das Symbol b
am Anfang der Zeichenkette zeigt an, dass die Zeichenkette ein Byte-Literal ist, da die Funktion encode()
für die Zeichenkette verwendet wird. Um das Symbol und die einfachen Anführungszeichen zu entfernen, die die Zeichenkette einkapseln, rufen Sie nach dem Aufruf von encode()
die Funktion decode()
auf, um sie erneut in ein Zeichenkettenliteral umzuwandeln.
print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore").decode())
Ausgabe:
Har ar ett exempel pa en svensk mening att ge dig.
Versuchen wir es mit einem anderen Beispiel, bei dem replace
als zweiter Parameter in der Funktion encode()
verwendet wird.
In diesem Beispiel probieren wir eine Zeichenkette mit Zeichen aus, die keine ASCII-Gegenstücke haben.
import unicodedata
stringVal = u"áæãåāœčćęßßßわた"
print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "replace").decode())
Alle Zeichen in dieser BeispielZeichenkette sind nicht in ASCII registriert, haben jedoch möglicherweise ein Gegenstücksymbol.
Ausgabe:
a??a?a?a??c?c?e??????
Der Parameter replace
ersetzt die Zeichen ohne ASCII-Gegenstücke direkt durch ein Fragezeichen ?
Symbol. Wenn wir ignore
für dieselbe Zeichenkette verwenden würden:
print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore").decode())
Die Ausgabe wird sein:
aaaacce
Zusammenfassend können Sie zum Konvertieren von Unicode-Zeichen in ASCII-Zeichen die Funktion normalize()
aus dem Modul unicodedata
und die integrierte Funktion encode()
für Zeichenketten verwenden. Sie können Unicode-Zeichen ohne ASCII-Gegenstücke entweder ignore
oder replace
. Die Option ignore
entfernt das Zeichen und die Option replace
ersetzt es durch Fragezeichen.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedInVerwandter Artikel - Python Unicode
Verwandter Artikel - Python String
- Entfernen Kommas aus String in Python
- Wie man prüft, ob eine Zeichenkette auf pythonische Weise leer ist
- Konvertieren einer Zeichenkette in einen Variablennamen in Python
- Wie man Leerzeichen in einem String in Python entfernt
- Wie man in Python Zahlen aus einer Zeichenkette extrahiert
- Wie man in Python String in datetime konvertiert