La commande file suivi d'un nom de fichier permet d'afficher son type. On peut y ajouter l'option -i (ou -I sur Mac) pour plus d'informations sur l'encodage.
Voici un exemple sur le fichier texte.txt, contenant uniquement du texte :
file -I fichier.txt;
et voici la réponse dans le terminal :
fichier.txt: text/plain; charset=utf-8
A l'aide de la fonction cut et des options -d (qui permet de définir un délimitateur) et -f (qui permet de définir la zone à selectionner en fonction de ce délimitateur), on va pouvoir extraire de l'information obtenue par la commande file l'encodage d'un fichier.
En reprenant l'exemple ci-dessus, on saisira la commande :
file -I fichier.txt | cut -d= -f2
(Attention, sur PC il faudra peut-être remplacer -I par -i et | par ¦ )
Cette commande indique qu'on choisi comme délimitateur le symbole "=" qui sépare ici notre chaîne de caractère en deux parties :
fichier.txt: text/plain; charset utf-8
(1) (2)
Avec l'option -f2, on ne garde que le contenu de la deuxième partie, c'est à dire utf-8.
On peut capturer la valeur rendue par cette commande dans une variable qu'on appellera encodage :
encodage=$(file -I fichier.txt | cut -d= -f2)
A partir de cette variable, on pourra imaginer un script qui affiche ou test l'encodage d'un fichier. Voici deux petits exemple en bash qui fonctionnent sur Mac :
1) Script pour afficher l'encodage d'un fichier:
#!/bin/bash
echo "Donnez le nom et l'emplacement d'un fichier";
read fichier;
encodage=$(file -I $fichier | cut -d= -f2);
echo "Ce fichier est encodé en $encodage.";
2) Script pour déterminer si un fichier est encodé en UTF-8:
#!/bin/bash
echo "Donnez le nom et l'emplacement du fichier à tester";
read fichier;
encodage=$(file -I $fichier | cut -d= -f2);
if [[ $encodage == "utf-8" ]]
then
echo "Ce fichier est bien encodé en UTF-8.";
else
echo "Ce fichier n'est pas encodé en UTF-8. Il est encodé en $encodage.";
fi
Ce commentaire a été supprimé par l'auteur.
RépondreSupprimerUn petit :
RépondreSupprimerfile -b --mime-encoding fichier.txt
fait très bien le job !