Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conversion de iso-8859 en utf-8

15 réponses
Avatar
Olivier V
Bonjour,

Quelqu'un a-t-il une solution "valable" pour convertir les données d'un
répertoire entier de l'iso-8859 vers de l'utf-8 ?

Je précise que dans ce(s) répertoire(s) certains fichiers ont besoin d'être
convertis (.txt, .tex, ...) mais d'autres non (.pdf, .jpg, ...).

Sur le net j'ai trouvé :

1) http://brunetton.tuxfamily.org/index.php?n=Main.ScriptUTF8toISO-8859-15
(à modifier pour faire le contraire, bien sûr)
Mais ça ne descend pas récursivement dans les répertoires et n'accepte pas
les espaces dans les noms.

2) http://sebdeblinux.free.fr/
Mais il faut que les répertoires ne contiennent que les fichiers à convertir
(pas d'images, etc ...) et n'accepte pas les espaces dans les noms.

Avez-vous mieux ?

Olivier V

10 réponses

1 2
Avatar
limax
Avez-vous mieux ?

Olivier V
bonjour


Quand j'ai converti en utf8 ma debian il y a un an j'ai crée ce script
qui utilise iconv et qui me convient parfaitement. Je l'ai nommé
convert2utf8

option -R ou -r pour transformer un dossier en récurssif

#!/bin/sh

function transforme()
{
char=`file -i $1 | sed 's/^.*charset=//'` #récupère le charset du fichier

if [ $char = iso-8859-1 ]
then
iconv -f iso-8859-1 -t utf-8 < $1 > $1.8 #conversion en utf8
mv $1.8 $1
echo "le fichier $1 a été transformé en utf8"
else
echo "le fichier $1 n'est pas iso-8859-1 mais "$char
fi
}

function usage()
{
echo "Usage: $0 nom_du_fichier.txt"
echo "Ce programme transforme un fichier de charset iso-8859-1 en utf8"
echo "option -R pour convertir un dossier récurssivement"
exit 1
}

if [ $# < 1 ] # si le nombre de paramètres n'est pas 1
then # affiche l'usage
usage
fi

case $1 in
-h | --help ) usage;;
-r | -R ) for i in `find ./ -type f `
do
transforme $i
done
;;
* ) for i in $*
do
transforme $i
done;;
esac

Avatar
Olivier V

Avez-vous mieux ?

Olivier V
bonjour


Quand j'ai converti en utf8 ma debian il y a un an j'ai crée ce script
qui utilise iconv et qui me convient parfaitement. Je l'ai nommé
convert2utf8


Merci beaucoup. C'est exactement ce que je cherche.

J'ai malheureusement (mauvaise habitude sur des vieux fichiers) quelques
fichier et répertoires avec des espaces.

Peut-on rendre le script utilisable sur de tels fichiers/répertoire ?
(J'ai testé et apparemment il n'en veut pas)

Olivier V


Avatar
limax


Avez-vous mieux ?

Olivier V


bonjour

Quand j'ai converti en utf8 ma debian il y a un an j'ai crée ce script
qui utilise iconv et qui me convient parfaitement. Je l'ai nommé
convert2utf8



Merci beaucoup. C'est exactement ce que je cherche.

J'ai malheureusement (mauvaise habitude sur des vieux fichiers) quelques
fichier et répertoires avec des espaces.

Peut-on rendre le script utilisable sur de tels fichiers/répertoire ?
(J'ai testé et apparemment il n'en veut pas)

Olivier V
Voila un premier jet (il y a sans doute plus propre) ca doit fonctionner.



#!/bin/sh

function transforme()
{
char=`file -i $1 | sed 's/^.*charset=//'` #récupère le charset

if [ $char = iso-8859-1 ]
then
iconv -f iso-8859-1 -t utf-8 < $1 > $1.8 #conversion en utf8
mv $1.8 $1
echo "le fichier $1 a été transformé en utf8"
else
echo "le fichier $1 n'est pas iso-8859-1 mais "$char
fi
}

function usage()
{
echo "Usage: $0 nom_du_fichier.txt"
echo "Ce programme transforme un fichier de charset iso-8859-1 en utf8"
echo "option -R pour convertir un dossier récurssivement"
exit 1
}

if [ $# < 1 ] # si le nombre de paramètres n'est pas 1
then # affiche l'usage
usage
fi

case $1 in
-h | --help ) usage;;
-r | -R ) IFS=$'nt'
for i in `find ./ -type f `
do
transforme $i
done
;;
* ) IFS="$n"
for i in $*
do
transforme $i
done;;
esac



Avatar
Olivier V

J'ai malheureusement (mauvaise habitude sur des vieux fichiers) quelques
fichier et répertoires avec des espaces.

Peut-on rendre le script utilisable sur de tels fichiers/répertoire ?
(J'ai testé et apparemment il n'en veut pas)

Voila un premier jet (il y a sans doute plus propre) ca doit fonctionner.



Super et de mieux en mieux ...

Une dernière chose (sans trop vous embêter j'espère ...), est-il possible
d'avoir un mode test (option -t ou -test) qui liste les fichiers qui seront
modifiés sans y toucher ?
Ceci afin d'être sûr de ne pas toucher à des fichiers qui ne devraient pas
être modifiés.

Merci.

Olivier V


Avatar
Olivier V

Voila un premier jet (il y a sans doute plus propre) ca doit fonctionner.


Problème plus embêtant : j'ai aussi beaucoup de fichiers en iso-8859-15 (qui
devront d'ailleurs aussi être convertis).

Or sur un tel fichier j'ai :
[ essai]$ file -i essai.tex | sed 's/^.*charset=//'
iso-8859-1
[ essai]$ file -i essai.tex
essai.tex: text/plain; charset=iso-8859-1
alors qu'il est en iso-8859-1.

Et certaines conversions sont donc bien sûr erronées :
Par exemple : ? donne ¤ et ? donne ½.

Par contre :
[ essai]$ iconv -f iso-8859-15 -t utf-8 essai.tex > essai_utf.tex
me donne bien sûr une conversion correcte.

Le test "file -i" semble ne pas reconnaître : il prend du iso-8859-15 pour
du 8859-1. (J'ai bien sûr aussi fait l'essai sur un fichier minimal créé
pour l'occasion ; même problème)

Que faire ?

Encore merci.

Olivier V

Avatar
limax


J'ai malheureusement (mauvaise habitude sur des vieux fichiers) quelques
fichier et répertoires avec des espaces.

Peut-on rendre le script utilisable sur de tels fichiers/répertoire ?
(J'ai testé et apparemment il n'en veut pas)



Voila un premier jet (il y a sans doute plus propre) ca doit fonctionner.



Super et de mieux en mieux ...

Une dernière chose (sans trop vous embêter j'espère ...), est-il possible
d'avoir un mode test (option -t ou -test) qui liste les fichiers qui seront
modifiés sans y toucher ?
Ceci afin d'être sûr de ne pas toucher à des fichiers qui ne devraient pas
être modifiés.

Merci.

Olivier V


il n'y avait pas grand chose à rajouter




#!/bin/sh

function transforme()
{
char=`file -i $1 | sed 's/^.*charset=//'` #récupère le charset du fichier

if [ $char = iso-8859-1 ]
then
iconv -f iso-8859-1 -t utf-8 < $1 > $1.8 #conversion en utf8
mv $1.8 $1
echo "le fichier $1 a été transformé en utf8"
else
echo "le fichier $1 n'est pas iso-8859-1 mais "$char
fi
}

function usage()
{
echo "Usage: $0 nom_du_fichier.txt"
echo "Ce programme transforme un fichier de charset iso-8859-1 en utf8"
echo "option -r pour convertir un dossier récurssivement"
echo "option -tr pour tester un dossier récurssivement"
echo "option -t pour tester un fichier"
exit 1
}

if [ $# < 1 ] # si le nombre de paramètres n'est pas 1
then # affiche l'usage
usage
fi

case $1 in
-h | --help ) usage;;
-r | -R ) IFS=$'nt'
for i in `find ./ -type f `
do
transforme $i
done
;;

-t[rR] | -[rR]t ) IFS=$'nt'
for i in `find ./ -type f `
do
echo "le fichier $i est de type `file -i $i | sed 's/^.*charset=//'`"
done;;

-t ) IFS=$'nt'
i=`echo $* | cut -d" " -f2-`
echo "le fichier $i est de type `file -i $i | sed 's/^.*charset=//'`"
;;

* ) IFS=$'nt'
for i in $*
do
transforme $i
done;;
esac
unset IFS



Avatar
limax


Voila un premier jet (il y a sans doute plus propre) ca doit fonctionner.



Problème plus embêtant : j'ai aussi beaucoup de fichiers en iso-8859-15 (qui
devront d'ailleurs aussi être convertis).

Or sur un tel fichier j'ai :
[ essai]$ file -i essai.tex | sed 's/^.*charset=//'
iso-8859-1
[ essai]$ file -i essai.tex
essai.tex: text/plain; charset=iso-8859-1
alors qu'il est en iso-8859-1.

Et certaines conversions sont donc bien sûr erronées :
Par exemple : ? donne ¤ et ? donne ½.

Par contre :
[ essai]$ iconv -f iso-8859-15 -t utf-8 essai.tex > essai_utf.tex
me donne bien sûr une conversion correcte.

Le test "file -i" semble ne pas reconnaître : il prend du iso-8859-15 pour
du 8859-1. (J'ai bien sûr aussi fait l'essai sur un fichier minimal créé
pour l'occasion ; même problème)

Que faire ?

Encore merci.

Olivier V
mince je n'ai pas répondu ou il fallait pour tester un dossier.


Effectivement il faut trouver comment faire la différence entre un
fichier iso-8859-15 et iso-8859-1
Je regarderai ce soir ou demain soir.


Avatar
Olivier V

mince je n'ai pas répondu ou il fallait pour tester un dossier.


Si semble-t-il.

Effectivement il faut trouver comment faire la différence entre un
fichier iso-8859-15 et iso-8859-1
Je regarderai ce soir ou demain soir.


Merci.
J'attends de vos nouvelles.

Bon WE.

Olivier V

Avatar
geo cherchetout
Le 18.11.2006 08:21, *limax* a écrit fort à propos :

Effectivement il faut trouver comment faire la différence entre un
fichier iso-8859-15 et iso-8859-1


Si nécessaire, utrac doit pouvoir aider.

Avatar
limax

Si nécessaire, utrac doit pouvoir aider.
où le trouve t on? Je n'ai pas pu le trouver.

Tu en as une version par hasard?

1 2