samedi 24 novembre 2012

CONNAITRE OU VERIFIER L'ENCODAGE D'UN FICHIER

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

2 commentaires:

  1. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  2. Un petit :
    file -b --mime-encoding fichier.txt
    fait très bien le job !

    RépondreSupprimer