samedi 24 novembre 2012

RECUPERER ET CONVERTIR L'ENCODAGE D'UN FICHIER

Nous avons vu que pour récupérer l'encodage d'un fichier dans une variable, on pouvait utiliser la commande file avec ses options -I et -d suivie de la commande cut et de ses options -d et -f.

En bash, il est également possible de convertir le format d'encodage d'un fichier à condition de préciser dans les options de la fonction iconv l'encodage d'entrée (-f) et l'encodage de sortie (-t).

Voici un exemple à partir d'un fichier texte encodé en ISO-8859-1. On veut convertir son encodage en UTF-8. On peut donc saisir la commande suivante dans le terminal :

iconv -f iso-8859-1 -t utf-8 < kamikaz.txt > kamikaz-UTF-8.txt

Rappel : "<" signifie qu'on donne en entrée le fichier kamikaz.txt et ">" qu'on veut obtenir en sortie le fichier kamikaz-UTF-8.txt

Il existe beaucoup de formats d'encodage différents et pour obtenir la liste de ceux disponibles depuis le terminal, on peut saisir la commande iconv -l. Les conversions ne sont possibles qu'entre des types d'encodage apparenant à cette liste.

Grâce à la fonction egrep, on va donc pouvoir tester si l'encodage d'un fichier appartient à la liste disponible depuis le terminal. 

Voici une proposition de script :

#!/bin/bash
echo "Donnez le nom et l'emplacement du fichier";
read fichier;
encodage=$(file -I $fichier | cut -d= -f2);

detection=$(iconv -l | egrep -i $encodage);

if [[ $detection != "" ]]
then
echo "L'encodage est a été reconnu";
else
echo "L'encodage ne fait pas parti de la liste";
fi



Commentaires

- La commande file -I $fichier | cut -d= -f2 permet de récupérer l'encodage du fichier d'entré. On enregistre cette valeur dans la variable encodage.

- La commande iconv -l | egrep -i $encodage permet de rechercher une occurence de la valeur de la variable encodage dans la liste des encodages disponibles. L'option -i permet de ne pas prendre en compte la case. Si cette commande renvoie une valeur, c'est que l'encodage du fichier appartient à la liste des encodages disponibles. On a donc enregistré le résultat de cette commande dans la variable detection afin de pouvoir mettre en place un test sur la valeur de cette variable.

On réutilisera ce type de script dans une des boucles de notre programme traitant nos fichiers d'URLS. Si l'encodage d'une page web aspirée est reconnu, à la place d'afficher le message "L'encodage est a été reconnu", on pourra lancer une convertion avec la commande iconv et les options -f et -t.

Aucun commentaire:

Enregistrer un commentaire