Nous pouvons parfois avoir un fichier contenant des caractères non valides ou contenant des mots en langue étrangère qui font que notre programme se bloque avec une “erreur de caractères non valides ».

Dans ce tutoriel, nous allons approfondir ce sujet et découvrir ce que sont les caractères non-UTF-8 et comment nous pouvons supprimer automatiquement tous les caractères invalides de nos fichiers.

Quels Sont Les Caractères Non-UTF-8

UTF-8 est un système de codage pour Unicode qui peut traduire n’importe quel caractère Unicode en une chaîne binaire unique correspondante. Il peut également convertir des chaînes binaires en leur caractère Unicode respectif d’où le préfixe ”UTF (Unicode Transformational Unit) ».

UTF-8 est unique car il représente des caractères en unités d’un octet contenant 8 bits chacun d’où le suffixe “-8″.

Les caractères non UTF-8 sont des caractères qui ne sont pas pris en charge par le codage UTF-8 et qui peuvent inclure des symboles ou des caractères provenant de langues étrangères non prises en charge.

Jetons un coup d’œil à certaines chaînes contenant des caractères non UTF-8:

Inanç Esasları
°nançEsasları
æ , , , , , , ,,,

Nous obtiendrons une erreur si nous tentons de stocker ces caractères dans une variable ou d’exécuter un fichier qui les contient.

Filtrage des Caractères UTF-8 non valides

Les fichiers qui contiennent des caractères non-UTF-8 produisent des erreurs lorsqu’ils sont traités par des utilitaires ou lorsqu’ils sont ouverts par certains éditeurs de texte. Jetons un coup d’œil au type d’erreurs à attendre dans différentes langues.

Une erreur en Python

Voici une erreur à laquelle nous pouvons nous attendre sur python:

Tronquer

UnicodeDecodeError: le codec ‘utf-8’ ne peut pas décoder l’octet 0xf1 en position 933: octet de continuation non valide
Aucun

Une erreur dans JavaScript

Jetons un coup d’œil à l’erreur à attendre en JavaScript:
freestar

Tronqué

SyntaxError non intercepté : Identifiant inattendu

Une erreur en Perl

Finalement, voyons l’erreur en Perl:

Caractère UTF-8 mal formé (fatal)

Comment Trouver des Caractères Non-UTF-8 dans un fichier

Nous pouvons facilement trouver tous les caractères non-UTF-8 dans un fichier en utilisant grep. En supposant que nous ayons configuré nos paramètres régionaux en UTF-8.

Tapons la commande suivante dans notre terminal pour imprimer toutes les lignes contenant des caractères non-UTF-8:

grep-axv’.*’ FICHIER

Voici ce que représente chaque partie de cette commande:

-a, -text: Traite notre FICHIER comme du texte, empêchant ainsi grep d'abandonner une fois qu'il trouve un caractère invalide.
- x‘.* ’ (expression rationnelle–line) : Correspond à une ligne complète contenant n'importe quel caractère UTF-8.
-v, - inverser la correspondance : Inverse notre sortie affichant les lignes non appariées.
FICHIER: Représente le fichier que nous voulons vérifier pour les caractères non valides.

Créons un fichier nommé test.txt et y ajouter du texte aléatoire avec des caractères non valides:
freestar

touch test tactile.txt

Ensuite, ajoutons le texte suivant:

2.3.1 U-0000D7FF = ed 9f bf = « ퟿������ »
C’est juste un texte aléatoire
Texte plus aléatoire. Baeldung est génial!

Utilisons maintenant notre commande grep pour trouver tous les caractères non valides dans notre fichier de test nouvellement créé:

gre grep-axv’.*’ test.txt
2.3.1 U-0000D7FF = ed 9f bf = « ퟿������ »

Mais cela ne nous est utile que lorsque nous avons besoin de trouver des caractères invalides. Dans la section suivante, nous verrons comment trouver et supprimer des caractères non valides dans notre fichier.

Comment Supprimer Automatiquement les Caractères Non-UTF-8

Pour rechercher et supprimer automatiquement les caractères non-UTF-8, nous allons utiliser la commande iconv. Il est utilisé dans les systèmes Linux pour convertir du texte d’un codage de caractères à un autre.

Voyons comment nous pouvons utiliser cette commande et une combinaison d’autres indicateurs pour supprimer les caractères non valides:

iconiconv-f FICHIER utf-8-t FICHIER utf-8-c

Nous pouvons décomposer la commande ci-dessus pour savoir ce que chaque partie fait:

-f : Représente le format de fichier d'origine. Nous l'avons défini comme utf-8 dans notre exemple ci-dessus
-t: Représente le format de fichier cible vers lequel nous voulons convertir.
- c : Ignore toutes les séquences non valides
FICHIER : Représente le fichier dont nous voulons supprimer les caractères non valides.

Par défaut, les données effacées seront écrites sur la sortie standard de notre terminal. Pour enregistrer les modifications que nous avons apportées, nous devons spécifier un fichier dans lequel les modifications seront enregistrées. Nous pouvons utiliser l’une des commandes suivantes pour enregistrer nos modifications:

iconiconv-f FICHIER utf-8-t FICHIER utf-8-c.txt-o NOUVEAU_FICHIER

ou
freestar

iconiconv-f FICHIER utf-8-t FICHIER utf-8-c.txt > NOUVEAU_FICHIER

Utilisons le fichier de test que nous avons créé ci-dessus pour supprimer tous les caractères non valides et enregistrer les modifications dans un fichier différent nommé “test_clean.txt”:

icon test d’iconv-f utf-8-t utf-8-c.txt > test_clean.txt

ou

icon test d’iconv-f utf-8-t utf-8-c.txt-o test_clean.txt

Conclusion

Nous avons examiné de plus près ce que sont les caractères UTF-8 et comment avoir des caractères non UTF-8 peut potentiellement causer des problèmes de compatibilité. Nous avons également examiné comment trouver des caractères invalides via grep et comment supprimer automatiquement les caractères invalides de notre fichier tout en utilisant la commande iconv.