Konvertieren von Unicode-Zeichen in ASCII-String in Python

Rayven Esplanada 22 Juni 2021
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.

Rayven Esplanada avatar Rayven Esplanada avatar

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.

LinkedIn

Verwandter Artikel - Python Unicode

Verwandter Artikel - Python String