Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2011, 19h16   #1
Invité de passage
 
Homme Simon
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Simon
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
Par défaut [bash][iconv] Script pour convertir projet entier en UTF-8 (mac OS X)

Bonjour,

J'ai un projet assez conséquent à convertir en UTF-8. Je suis sur Mac.

Le projet initial est encodé est ISO-8859-1, toutefois, certains fichiers sont en US-ASCII par exemple.

J'ai trouvé un script bash assez intéressant sur le net, utilisant iconv pour la conversion, mais je voudrais le personnaliser pour qu'il prenne en compte automatiquement l'encodage initial de chaque fichier.

Le script initial :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#/bin/bash
#
# iconv-inplace.sh
# Does recursive charset conversion using iconv
#
# Copyright (c) 2009 Onlime Webhosting, Philip Iezzi
#                    http://www.onlime.ch
 
###### Configuration ######
FROM_CHARSET="ISO-8859-1"
TO_CHARSET="UTF-8"
###########################
 
# Validate args
STARTDIR="$1"
if [ -z "$STARTDIR" ]
then
    echo "Usage: $0 <directory>"
    echo "where: <directory> is the directory to start the recursive UTF-8 conversion."
    exit 1
fi
 
LIST=`find $1 -name "*.php"`
for i in $LIST;
do
    file -I $i;
    read -p "Convert $i (y/n)? "
    if [ "$REPLY" == "y" ]
    then
        iconv --from-code=$FROM_CHARSET --to-code=$TO_CHARSET $i > $i."utf8";
        mv $i."utf8" $i;
    fi
    echo "";
done
Ce script est une bonne base, mais le principal inconvénient est que l'encodage initial doit obligatoirement être définit dans le script (FROM_CHARSET="ISO-8859-1").

Je souhaiterais savoir comment "détecter" automatiquement l'encodage du fichier initial, j'ai fait ça, mais ça ne marche pas :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
LIST=`find $1 -name "*.php"`
for i in $LIST;
do
    file -I $i;
    CONVERT_TO = `file --mime-encoding $i`
    read -p "Convert $i to $CONVERT_TO (y/n)? "
    if [ "$REPLY" == "y" ]
    then
        iconv --from-code=$FROM_CHARSET --to-code=$CONVERT_TO $i > $i."utf8";
        mv $i."utf8" $i;
    fi
    echo "";
done
En gros, à chaque itération je souhaite récupérer dans la variable CONVERT_TO l'encodage du fichier initial.
Ainsi, dans la commande iconv, je remplace la variable "FROM_CHARSET" par "CONVERT_TO"...

Seulement voilà, j'ai une erreur à l'éxecution du script :

Code :
CONVER_TO: command not found
Quelqu'un pourrait m'aider à ce sujet? j'imagine que la solution est assez simple mais vu que je suis débutant en BASH, j'ai du mal à trouver...

Merci d'avance
Simon
aidonia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 19h22   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Code :
CONVERT_TO = `file --mime-encoding $i`
Il y a des espaces en trop autour du signe égale

Code :
CONVERT_TO=`file --mime-encoding $i`
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 19h42   #3
Invité de passage
 
Homme Simon
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Simon
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
Bonjour et merci pour ta réponse,

Effectivement c'est bien ça, comme quoi ça se joue à pas grand chose parfois...

Une dernière question, la commande

Code :
file --mime-encoding /path/to/file
retourne :

Code :
/path/to/file: us-ascii
Comment récupérer uniquement la partie us-ascii du résultat pour pouvoir utiliser la valeur dans iconv ?

Encore merci!
aidonia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 20h01   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Quel système ?
Quelle version de file ?

As-tu regardé les options dans le "man file" ?

Sinon tu peux te servir de l'expansion des paramètres si ton bash le permet..

Code :
1
2
3
4
5
$ echo ${A}
/path/to/file: us-ascii

$ echo ${A#*: }
us-ascii
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 21h02   #5
Invité de passage
 
Homme Simon
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Simon
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
Parfait, c'est exactement ce que je souhaitais !

Je suis sur Mac donc unix et la solution que tu m'as donné semble fonctionnée.

Encore merci, je poste le script prochainement on sait jamais ça peut toujours servir ^^

Merci!
aidonia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h57.


 
 
 
 
Partenaires

Hébergement Web