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