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.
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.
LinkedInArticle connexe - Python Unicode
Article connexe - Python String
- Supprimer les virgules de la chaîne en Python
- Comment vérifier qu'une chaîne est vide de manière pythonique
- Convertir une chaîne en nom de variable en Python
- Comment supprimer les espaces dans une chaîne de caractères en Python
- Comment extraire des nombres d'une chaîne de caractèresen Python
- Comment convertir une chaîne de caractères en datetime en Python