Forum
  • MUGs
  • Help fund the Mandriva Linux project

The time now is Thu Sep 09, 2010 7:35 am

Become a registered member of the Mandriva community.It takes only 5 mns and it's free ... Learn more ...
[Résolu] Conversion fichiers ISO vers UTF8

 
Post new topic   Reply to topic    Mandriva Forum Index -> Logiciels Divers
View previous topic :: View next topic  
Author Message
cibou 57

Non Figura

Joined: 12 Mar 2007
Posts: 6

View user's profile Send private message
PostPosted: Mon Mar 12, 2007 12:11 pm    Post subject: [Résolu] Conversion fichiers ISO vers UTF8 Reply with quote Report

Bonjour

je suis sous mandriva free 2007.
Lors de la migration vers mandriva (avant j'étais sous debian), et donc vers utf8, les caractères spéciaux dans les noms de fichiers et dans les fichiers (txt notamment) ont été remplacés par des caractères illisibles.
A priori c'est normal, vu que j'ai trouvé les posts correspondants dans le forum :
"tutoriel MDV 2007 - UTF-8 ou latin1 ?"
"[Résolu] MAJ -> 2007 : UTF-8"

La solution semble être de convertir à l'aide d'iconv et de convmv. Le tuto: http://sebdeblinux.free.fr/ permet d'utiliser un script.

quand je l'execute j'ai l'erreur :
/convertEnc.sh: line 95: [: too many arguments
telle que décrite dans "[Résolu] MAJ -> 2007 : UTF-8[/url".

Est-ce que quelqu'un a un script corrigé svp? mes connaissances limitées ne me permettent pas de le corriger moi-même avec les infos disséminées dans les posts...

j'ai pas mal de données à convertir, je suis donc aussi une bêta-testeuse potentielle, si vous voulez vous lancer !

Merci pour votre aide!


Last edited by cibou 57 on Tue Mar 13, 2007 11:55 am; edited 1 time in total
Back to top
yoho
Taster
yoho

Joined: 16 Apr 2005
Posts: 3776
Location: Brussels, Belgium

View user's profile Send private message
PostPosted: Mon Mar 12, 2007 1:49 pm    Post subject: Reply with quote Report

Je te conseille de connaître ces URL par coeur et de les lire avant toute installation :
http://wiki.mandriva.com/en/Releases/Mandriva/2007/Notes
http://wiki.mandriva.com/en/Releases/Mandriva/2007/Errata
Et leur équivalent français (incomplet, n'hésite pas à aider si tu veux participer et traduires quelques passages si tu as 5 min) :
http://wiki.mandriva.com/fr/Mandriva_Linux_2007.0_Notes
http://wiki.mandriva.com/fr/Mandriva_Linux_2007.0_Errata
Back to top
cibou 57

Non Figura

Joined: 12 Mar 2007
Posts: 6

View user's profile Send private message
PostPosted: Mon Mar 12, 2007 1:59 pm    Post subject: Reply with quote Report

Merci pour les liens, c'est toujours bien de les rappeler. Hélas, je les avais lus Sad et mon problème se pose toujours.

En particulier le sujet :
UTF8 issue when reinstalling and keeping a previous /home that was not in UTF8

http://wiki.mandriva.com/en/Releases/Mandriva/2007/Errata#UTF8_issue_when_reinstalling_and_keeping_a_previous_.2Fhome_that_was_not_in_UTF8

car il ne concerne que les noms de fichiers et pas leur contenu, ce qui ne résoudrait que la moitié du problème. Je suis à la recherche d'une modification en masse pour des fichiers .txt ainsi que le propose le script cité ci-dessus (sauf qu'il plante).

qui saurait quoi faire ?
Back to top
yoho
Taster
yoho

Joined: 16 Apr 2005
Posts: 3776
Location: Brussels, Belgium

View user's profile Send private message
PostPosted: Mon Mar 12, 2007 2:05 pm    Post subject: Reply with quote Report

Ah, je vois. Je n'ai eu de problèmes qu'avec le nom des fichiers, pas avec leur contenu donc ce script m'a suffit.

Pour le contenu, même si le script plante, fait un essai avec un fichier. Le code du script est assez clair et commenté, alors essaye chaque commande du script une par une. Voici la routine qui convertit le contenu d'un fichier :
Code:
do_convert()
  51:{
  52:fic="$1"
  53:echo "  Fichier $fic"
  54:# Lecture du type mime
  55:encForm=`file -bi "$fic" | awk -F "charset=" '{ print $2 }'`
  56:if [ !  "$encForm" = "" ]; then
  57:    # le fichier possede un charset
  58:    echo "  -> $encForm"
  59:    if [ ! "$encForm" = "$TO" ]; then
  60:        # ce charset est different de celui vise
  61:        # nom du fichier converti temporaire
  62:        renomme "$fic"_"$TO"
  63:        nouv_fic=$nouvnom
  64:        # la conversion
  65:        iconv -f "$encForm" -t $TO "$fic" -o "$nouv_fic"
  66:        # Pour conserver la/les date(s) :
  67:        touch -r "$fic" "$nouv_fic"
  68:        # Pour conserver le proprietaire
  69:        chown --reference "$fic" "$nouv_fic"
  70:        # pour conserver les droits :
  71:        chmod --reference "$fic" "$nouv_fic"
  72:        # on ecrase l'ancien fichier par le nouveau
  73:        mv -f "$nouv_fic" "$fic"
  74:    fi
  75:fi
  76:
  77:}
Back to top
cibou 57

Non Figura

Joined: 12 Mar 2007
Posts: 6

View user's profile Send private message
PostPosted: Mon Mar 12, 2007 3:53 pm    Post subject: Reply with quote Report

ok et merci.
les commandes décrites fonctionnent, donc on peut convertir les fichiers 1 à 1. ça me fait quand même encore pas mal de boulot ;(

le script essaie de travailler sur tous les fichiers d'un répertoire de manière récursive (je lis les annotations !).
Le problème se situe apparemment à la ligne 95 cf mon message d'erreurs "too many arguments ":
--> y a-t-il trop de fichiers dans le répertoire??
--> la commande est-elle inexacte ??
Visiblement (cf. les annotations) il faudrait utiliser la commande xargs ???

cela dépasse mes compétences: lire du code, ok, mais le corriger, c'est plus dur !!
Back to top
yoho
Taster
yoho

Joined: 16 Apr 2005
Posts: 3776
Location: Brussels, Belgium

View user's profile Send private message
PostPosted: Mon Mar 12, 2007 6:18 pm    Post subject: Reply with quote Report

Oui, il est possible qu'il y ait trop de fichiers. C'est pourquoi tu as ce message... Essaye sur des petits nombres de fichiers (et sauvegarde-les quelquepart avant...)
Back to top
JacquesF

JacquesF

Joined: 18 Mar 2005
Posts: 1036

View user's profile Send private message
PostPosted: Mon Mar 12, 2007 8:50 pm    Post subject: Reply with quote Report

Too many arguments
En général il s'agit soit d'une erreur dans un test avec une variable non initialisée ou ce qui semble être le cas une ligne de commande trop longue pour être traitée.

La cause doit être la boucle ci-contre :
for fic in * .* ; do
ce qui correspond à la liste de tous les fichiers (avec les fichiers cachés .*) de tout le répertoire.
Solution qui devrait marcher, remplacer la boucle comme ceci :
for fic in * .* | xargs ; do
La commande xargs permet d'évaluer les arguments un à un, ce qui règle ce type de problème.

Jacques
Back to top
cibou 57

Non Figura

Joined: 12 Mar 2007
Posts: 6

View user's profile Send private message
PostPosted: Mon Mar 12, 2007 9:31 pm    Post subject: Reply with quote Report

ça devient plus concret Wink mais j'ai une erreur...

./convertEnc.sh: line 95: syntax error near unexpected token `|'
./convertEnc.sh: line 95: ` for fic in * .* | xargs ; do '

... avez-vous une idée ?
Back to top
yoho
Taster
yoho

Joined: 16 Apr 2005
Posts: 3776
Location: Brussels, Belgium

View user's profile Send private message
PostPosted: Mon Mar 12, 2007 10:37 pm    Post subject: Reply with quote Report

Je pense qu'il est préférable d'utiliser find, non ?
Back to top
JacquesF

JacquesF

Joined: 18 Mar 2005
Posts: 1036

View user's profile Send private message
PostPosted: Tue Mar 13, 2007 7:34 am    Post subject: Reply with quote Report

Pas sur ma machine pour vérifier, mais ça doit venir de la forme abrégée du for.
Utilise dans ce cas for fic in `ls * .* | xargs` ; do je pense que ça règlera l'erreur.
Autrement, une autre solution radicale, créer une liste des fichiers (de préférence dans un fichier situé dans un autre répertoire, genre /tmp) pour que celle liste n'apparaisse pas dans la liste des fichiers à traiter, et prend en source de la boucle for.
Cela donne cela en code :
ls * .* > /tmp/MaListe
while read fic ; do
# Traitement des fichiers
done < /tmp/MaListe


Il faut comprendre le code ainsi, une boucle while qui exécute un read à chaque ligne du fichier qui est pris en entrée (done < /tmp/MaListe) et qui stocke la ligne lue dans la variable fic.

Jacques
Back to top
yoho
Taster
yoho

Joined: 16 Apr 2005
Posts: 3776
Location: Brussels, Belgium

View user's profile Send private message
PostPosted: Tue Mar 13, 2007 9:12 am    Post subject: Reply with quote Report

Pour l'utilisation de find, on peut faire comme cela (attention, la syntaxe est stricte):
Code:

find . -exec ma_commande '{}' ';'


on remplace ma_commande par "ls" par exemple et cela affiche tous les fichiers récursivement.
Back to top
cibou 57

Non Figura

Joined: 12 Mar 2007
Posts: 6

View user's profile Send private message
PostPosted: Tue Mar 13, 2007 10:41 am    Post subject: Reply with quote Report

Avec la dernière correction de Jacques F je n'ai plus d'erreur et mes fichiers tests sont corrigés.

Donc pour moi c'est parfait, je vais m'attaquer à la copie de mon /home... Comment corrige-t-on le topic pour dire que c'est résolu ?

En outre je vais transmettre le script pour mettre à jour http://sebdeblinux.free.fr/

Merci à tous pour votre aide !!!!!!!
Laughing
Back to top
yoho
Taster
yoho

Joined: 16 Apr 2005
Posts: 3776
Location: Brussels, Belgium

View user's profile Send private message
PostPosted: Tue Mar 13, 2007 10:58 am    Post subject: Reply with quote Report

Cool !

Pour changer le sujet du fil, édite ton premier post et change son sujet.
Back to top
sebdeb

Non Figura

Joined: 23 Jan 2006
Posts: 139
Location: Paris - France

View user's profile Send private message
PostPosted: Tue Mar 13, 2007 11:26 am    Post subject: Reply with quote Report

Bonjour à tous,

merci pour les corrections.
Comme je le mettais ici : http://forum.club.mandriva.com/viewtopic.php?t=53978&start=25
j'avais rencontré des soucis avec ce script.
Dès que j'ai un peu de temps je mets sur mon site la version corrigée avec vos conseils.
Merci à cibou 57 d'avoir relancé le sujet.

Bonne journée.
Back to top
JacquesF

JacquesF

Joined: 18 Mar 2005
Posts: 1036

View user's profile Send private message
PostPosted: Wed Mar 14, 2007 8:26 pm    Post subject: Reply with quote Report

Le read est toujours radical quand on traite une liste trop longue.
Et pourtant, la longueur maxi de la ligne de commande sous linux est vraiment impressionnante, mais on arrive parfois aux limites.
Cette technique marche aussi pour lire dans plusieurs variables les différents champs d'un fichier texte (séparés par une tabulation ou une espace, ou si on modifie la variable IFS par un tout autre caractère).

Content de savoir que ça a marché.

Jacques
Back to top
sebdeb

Non Figura

Joined: 23 Jan 2006
Posts: 139
Location: Paris - France

View user's profile Send private message
PostPosted: Sat Mar 17, 2007 11:26 pm    Post subject: script corrigé : site à jour Reply with quote Report

Bonsoir à tous,

j'ai corrigé mon script convertEnc.sh en prenant en compte :
- le debug sur les listes de fichiers trop longues (merci JacquesF)
- prise en compte du statut réussite ou échec de la commande iconv (qui fait le boulot de conversion) pour décider de remplacer ou nom l'ancien fichier par le nouveau.

Le script est disponible ici : http://sebdeblinux.free.fr/

Merci à Cibou57 d'avoir relancé le sujet !

Sébastien
Back to top
PhilR

PhilR

Joined: 10 Aug 2004
Posts: 28

View user's profile Send private message
PostPosted: Thu Apr 12, 2007 8:20 am    Post subject: [Resolu] Ou peut-on trouver iconv ? Reply with quote Report

Bonjour,

En tant qu'utilisateur de base j'ai essayé de suivre le super tuto de sebde à la lettre.

J'ai un probleme pour commencer car j'essaye d'installer iconv via un rpm mais je ne le trouve pas (le urpmi iconv me renvoi une liste avec des php-iconv, et autre psi-iconv mais pas le bon) . Rien sur rpmfind.net ni sur rpm.pbone.net ???

J'en profite pour signaler le l'article indique de charger conmv au lieu de convmv . Je sais c'est idiot mais autant être

Une autre suggestion d'amelioration serait de rajouter dans quel depot (contrib.release ou main.updates par exemple ) se trouve iconv / convmv

Merci d'avance
Back to top
JacquesF

JacquesF

Joined: 18 Mar 2005
Posts: 1036

View user's profile Send private message
PostPosted: Thu Apr 12, 2007 7:28 pm    Post subject: Reply with quote Report

Le fichier /usr/bin/iconv est livré par le paquet glibc-2.3.6-4.1.20060mdk (sur ma Mandriva 2006, pour les autres dans la glibc de la version).
Il doit être présent sur ta machine, vérifie dans le répertoire /usr/bin

Jacques
Back to top
Pasq Pasque

Non Figura

Joined: 23 Sep 2005
Posts: 400

View user's profile Send private message
PostPosted: Thu May 29, 2008 3:39 pm    Post subject: Reply with quote Report

Je relance ce fil car j ai besoin du script et il plante ! Wink

En fait , il y a plantage a chaque fois que le nom de fichier contient un blanc :
ex : Mon Voyage au Maroc.txt

je ne sais pas si qlq un a resolu ce petit probleme ? Merci
Back to top
JacquesF

JacquesF

Joined: 18 Mar 2005
Posts: 1036

View user's profile Send private message
PostPosted: Sat May 31, 2008 10:29 am    Post subject: Reply with quote Report

Dans la dernière version et avec les corrections que j'avais faites, le script donné par Seb fonctionnait à priori sans soucis, que ce soient le nombre ou la présence d'espaces dans le nom.
Vérifie que le fichier script est bien à la dernière version, sinon le problème se situe à chaque fois qu'on référence la variable désignant le fichier, il faut la mettre entre guillemets (seul problème possible, un nom de fichier possédant un guillemet).

Jacques
Back to top
Display posts from previous:   
Post new topic   Reply to topic    Mandriva Forum Index -> Logiciels Divers All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group