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 :
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
| #/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 :
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 :
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
Partager