[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [gulliver] Encodage de caractères


From Florent Monnier <monnier dot florent at gmail dot com>
Subject Re: [gulliver] Encodage de caractères
Date Sat, 10 Mar 2012 23:54:43 +0100

Le jeudi 08 mars 2012 15:15:31, Yannick VOYEAUD a écrit :
> Bonjour,
> 
> Les pros de la ligne de commandes pourraient-ils me donner la/les
> commande/s qui va/vont bien de façon que je la/les recopie directement
> dans un terminal? À moins qu'il n'y ait un outil graphique.
> 
> J'ai un répertoire /media/EXTERNE/Web/CG
> Ce répertoire contient des fichiers encodés en iso8859-15,  iso8859-1,
> utf-8 et peut-être d'autres de l'époque Windows
> 
> Je veux TOUT passer en utf-8 sans avoir à ouvrir chaque fichier avec gedit.
> Les répertoires enfants DOIVENT subir le même processus donc
> j'apprécierai de faire tout en une seule passe.
> 
> 
> J'ai cru voir iconv mais comme après c'est en anglais dans les
> explications et que je ne suis pas sûr de moi...
> 
> Merci du coup de main
> 
> Amitiés

Bonsoir,

Sur ma machine, le manuel de l'utilitaire iconv est disponible en français.
Or comme la plupart des pages de manuel sont disponibles sur internet, tu 
peux la trouver en faisant la recherche "man iconv" dans un moteur de 
recherche:

http://pwet.fr/man/linux/commandes/iconv

Ainsi la ligne de commande à invoquer est la suivante :

iconv --from-code ISO-8859-15 --to-code UTF-8 \
 vieux_repertoire/fichier.txt --output nouveau_repertoire/fichier.txt

En cherchant sur internet j'ai également trouvé l'utilitaire recode, dont la 
ligne de commande est plus courte, et modifie le fichier plutôt que d'en 
créer un autre (ce qui n'est pas recommandé la plupart du temps, et en 
particulier pour un débutant qui n'est pas familiarisé avec la ligne de 
commande):

recode ISO-8859-15..UTF-8 test.txt

Dans les deux cas ce qui va peut-être vous poser problème c'est qu'il faut 
indiquer sur la ligne de commande l'encodage d'origine.

L'utilitaire enca est fait pour essayer de deviner l'encodage utilisé, mais 
d'après sa page de manuel il ne fonctionne qu'avec les encodages de 
caractères spéciaux sur plusieurs bytes. Ainsi après un test rapide il est 
capable de détecter de l'utf-8 mais pas de l'iso-8859-15 ni du cp1252.

L'iso-8859-15, l'iso-8859-1 et le cp1252 sont assez proches pour les 
caractères les plus communs, peut-être pouvez-vous faire un essai en 
considérant tous comme du iso-8859-15.

Pour de l'utf-8, l'utilitaire enca donne la réponse suivante :

enca -L none test.txt
Universal transformation format 8 bits; UTF-8

Pour faire vos tests sans écraser les fichiers originaux, j'ai cru comprendre 
que vous aviez vos fichiers dans une arborescence de répertoires et non un 
répertoire unique, donc pour recréer cette arborescence vous pouvez utiliser 
une combinaison des utilitaires tree et mkdir avec une boucle for bash comme 
suit:

for dir in `tree -fid --noreport /media/EXTERNE/Web/CG`; \
  do mkdir -p /tmp/test/$dir; done

tree est un utilitaire permettant de lister récursivement le contenu d'une 
arborescence de répertoires.
mkdir permet de créer de nouveaux répertoires.
La boucle for permet de fournir à mkdir chaque résultat de la commande tree, 
afin de créer dans le répertoire /tmp/test/ un répertoire avec le même nom 
que dans l'arborescence source.

Attention la boucle for utilise les espaces et les retours à la ligne comme 
séparateurs, donc ça ne fonctionne pas sur les répertoires contenant un 
espace dans leur nom.

Ensuite tu peux essayer d'exécuter ce script :

for f in `tree -fi --noreport /media/EXTERNE/Web/CG`
do
    if [ -f $f ]
    then
        ENC=`enca -L none -r $f`
        if [ "$ENC" != "UTF-8" ]
        then
            iconv -f ISO-8859-15 -t UTF-8 \
              $f --output /tmp/test/$f
        fi
    fi
done

Comme ça ferait un peu long comme ligne de commande, placez plutôt ceci dans 
un fichier myscript.sh puis vous l'exécutez avec la commande :
sh monscript.sh

Voilà, c'est sans garantie aucune !
Amicalement
Florent