Convertir les caractères Unicode en chaîne ASCII en Python

Rayven Esplanada 22 juin 2021
Convertir les caractères Unicode en chaîne ASCII en Python

Caractères Unicode est la norme de codage globale pour les caractères de toutes les langues. Contrairement à l’ASCII, qui ne prend en charge qu’un seul octet par caractère, les caractères Unicode étendent cette capacité à 4 octets, ce qui permet de prendre en charge plus de caractères dans n’importe quelle langue.

Ce didacticiel montre comment convertir des caractères Unicode en une chaîne ASCII. L’objectif est de supprimer les caractères qui ne sont pas pris en charge en ASCII ou de remplacer les caractères Unicode par leur caractère ASCII correspondant.

Utilisez unicodedata.normalize() et encode() pour convertir Unicode en chaîne ASCII en Python

Le module Python unicodedata fournit un moyen d’utiliser la base de données de caractères en Unicode et des fonctions utilitaires qui facilitent considérablement l’accès, le filtrage et la recherche de ces caractères.

unicodedata a une fonction appelée normalize()qui accepte deux paramètres, la forme normalisée de la chaîne Unicode et la chaîne donnée.

Il existe 4 types de formulaires Unicode normalisés: NFC, NFKC, NFD et NFKD. Pour en savoir plus à ce sujet, la documentation officielle est facilement disponible pour une explication approfondie et approfondie de chaque type. La forme normalisée NFKD sera utilisée tout au long de ce tutoriel.

Déclarons une chaîne avec plusieurs caractères Unicode.

import unicodedata

stringVal = u"Här är ett exempel på en svensk mening att ge dig."

print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore"))

Après avoir appelé la méthode normalize(), enchaînez un appel à la fonction encode(), qui effectue la conversion d’Unicode en ASCII.

Le caractère u avant la valeur de chaîne aide Python à reconnaître que la valeur de chaîne contient des caractères Unicode; ceci est fait à des fins de sécurité de type.

Le premier paramètre spécifie le type de conversion et le second paramètre applique ce qui doit être fait si un caractère ne peut pas être converti. Dans ce cas, le 2ème paramètre passe ignore, qui ignore tout caractère qui ne peut pas être converti.

Production:

b'Har ar ett exempel pa en svensk mening att ge dig.'

Notez que les caractères Unicode de la chaîne d’origine (ä et å) ont été remplacés par leur équivalent de caractère ASCII (a).

Le symbole b au début de la chaîne indique que la chaîne est un littéral d’octet puisque la fonction encode() est utilisée sur la chaîne. Pour supprimer le symbole et les guillemets simples encapsulant la chaîne, alors chain appelez la fonction decode() après avoir appelé encode() pour la reconvertir en une chaîne littérale.

print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore").decode())

Production:

Har ar ett exempel pa en svensk mening att ge dig.

Essayons un autre exemple en utilisant le replace comme deuxième paramètre de la fonction encode().

Pour cet exemple, essayons une chaîne contenant des caractères qui n’ont pas d’équivalent ASCII.

import unicodedata

stringVal = u"áæãåāœčćęßßßわた"

print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "replace").decode())

Tous les caractères de cet exemple de chaîne ne sont pas enregistrés en ASCII mais peuvent avoir un symbole équivalent.

Production:

a??a?a?a??c?c?e??????

Le paramètre replace remplace carrément les caractères sans équivalents ASCII par un point d’interrogation ? symbole. Si nous devions utiliser ignore sur la même chaîne:

print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore").decode())

La sortie sera:

aaaacce

En résumé, pour convertir des caractères Unicode en caractères ASCII, utilisez la fonction normalize() du module unicodedata et la fonction intégrée encode() pour les chaînes. Vous pouvez ignore ou replace les caractères Unicode qui n’ont pas d’équivalent ASCII. L’option ignore supprimera le caractère, et l’option replace le remplacera par des points d’interrogation.

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

Article connexe - Python Unicode

Article connexe - Python String