Vous êtes ici : Accueil / 2010 / Janvier / Ligne de commande, quand tu nous tiens !

Ligne de commande, quand tu nous tiens !

écrit le 08/04/2010 Par alexandre
Catastrophe ! La moitié de mes fichiers est en iso-8859-1, l'autre en utf-8. Vite, je dégaine iconv !

iconv permet de transformer les fichiers d'un codage de charactères à un autre.

De plus, on utilise une astuce : un fichier en iso-8859-1 (latin1) qui est décodé comme de l'utf-8 a toutes les chances de planter. En effet, si latin1 est dense, c'est à dire qu'il utilise toutes les combinaisons de bit possibles, ce n'est pas le cas de l'utf-8. Par conséquent, si toute chaîne sera forcément interprétée (même si c'est de manière érronnée) par latin1, ce ne sera pas le cas avec utf-8.

Pour savoir si mon fichier est utf-8, je regarde donc le résultat de la commande iconv suite à un décodage en utf-8 :

if (iconv -f utf-8 mon_fichier >/dev/null 2>&1)
then
  echo utf-8
else
  echo other
fi

Remarquez les parenthèses au début et à la fin de la condition pour que les redirections (qui évitent d'avoir trop de choses à l'écran) ne concernent que cette commande.

Et maintenant, comment convertir les fichiers de mon dossier template qui en ont besoin ?

$ for f in templates/*
  do
    if (iconv -f utf-8 $f >/dev/null 2>&1)
    then
      echo "$f ok"
    else
      iconv -f latin1 -t utf-8 $f -o $f.utf8
      mv $f.utf8 $f
      echo $f done
    fi
  done

Normalement on fait ça sur une ligne, bien sûr (faut bien impressionner) :

$ for f in templates/*;do if (iconv -f utf-8 $f >/dev/null 2>&1) ; then echo "$f ok";else iconv -f latin1 -t utf-8 $f -o $f.utf8; mv $f.utf8 $f; echo $f done;  fi;done

Et voilà, vous pouvez retourner à des occupations plus mondaines !

Actions sur le document