#1 Le 05/11/2011, à 14:48
- jafrez
[RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
Bonjour à tous
j'ai récemment été au contact d'un ordinateur MAC (OS 10.5 il me semble) qui m'a créé une multitude de fichiers textes que je suis incapable de lire avec le terminal (cf plus loin pour détail du problème). Problème récurrent associé aux différents encodages adoptés par les systèmes d'exploitation.
Le problème m'était déjà arrivé sous windows que j'avais résolu grâce à un
iconv -f latin1 -t utf8 fichier.latin1.txt > fichier.utf8.txt
mais, là je reste pantois...
l'éditeur gedit lit très bien le fichier mais un cat fichier.mac.txt me montre clairement que le terminal ne lit pas bien les retours charriots : il m'écrit tout le contenu du fichier sur une ligne.
la ligne
file fichier.mac.txt
me revoit
mac.txt: ASCII text, with CR line terminators
alors que je m'attends plutôt à quelque chose du genre
mac.txt: ASCII text
Certes, il n'est pas aisé de convertir l'encodage d'un fichier lorsque l'on ne connaît pas avec certitude l'encodage d'origine. Et là pas moyen de comprendre ce qu'utilise mac...
J'ai même écrit une routine qui teste toutes les possibilités de conversion....
iconv --list > ICONV.list
sed -i -e "s/\/\///g" ICONV.list #rectification d'un problème spécifique à ma machine
echo
head ICONV.list
echo
awk 'END {print NR}' ICONV.list
NbTests=`awk 'END {print NR}' ICONV.list`
echo 'NbTests='$NbTests
i=1
while test $i != $(($NbTests+1))
do
echo 'boucle numero' $i
encodage=`awk -v numeroligne=$i '{if(NR==numeroligne) print $0}' ICONV.list`
echo $encodage
iconv -f $encodage -t utf8 mac.txt
i=$(($i+1))
echo
echo
done
sans succès...
D'après ce que j'ai vu sur un autre forum, j'ai essayé sed :
sed 's/^M$/\\n/' fichier.mac.txt
et quelques autres combinaisons dans le même esprit. Sans succès...
J'ai essayé de convertir les fichiers à l'aide du terminal sous mac... sans succès. D'ailleurs, il est peut-être pertinent de remarquer que le terminal rencontre exactement les mêmes problèmes que sous linux : des commandes comme cat ou encore awk renvoient des sorties illisibles sur une ligne...
Je sèche complètement et comme je suis obstiné, j'ai peur d'y passer tout le weekend.
Vous auriez une idée?
Dernière modification par jafrez (Le 05/11/2011, à 16:25)
Hors ligne
#2 Le 05/11/2011, à 15:09
- Bousky
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
Quand tu l'affiches dans le terminal, est-ce qu'il y a d'autres problèmes à part les sauts de lignes ? Si non ce n'est pas un problème d'encodage des caractères, mais juste un problème d'encodage des sauts de ligne. Si tu peux l'ouvrir sans problème sous gedit, as-tu essayé de l'enregistrer (de préférence sous un autre nom) ?
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#3 Le 05/11/2011, à 15:25
- jafrez
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
Coucou
Merci pour tes questions pertinentes :
(1) je n'ai dans mes fichiers que des colonnes de nombres et pas d'accents, c'est donc difficile de répondre à ta première question...
(2) sinon, oui, j'ai essayé d'enregistrer sous un autre nom avec gedit mais, le problème est qu'il conserve le type d'encodage. En plus, j'ai environ 200 fichiers à manipuler...
enfin, certain logiciels reconnaissent les types d'encodage, j'ai trouvé sur un site qui propose de faire la reconnaissance avec firefox (pourquoi pas, c'est même logique d'utiliser un logiciel web pour reconnaitre un encodage) ICI
Alors enfin, je me suis résolu à quelque chose qui m'hérisse le poil : changer le type d'encodage du terminal... arg, j'en ai des frissons dans le dos, mais, je vais explorer cette voie...
euh... mais, ça me fait quand même des trucs bizarres pour l'instant.
à+
ADDENDUM :
Si non ce n'est pas un problème d'encodage des caractères, mais juste un problème d'encodage des sauts de ligne.
j'y crois !!!
ADDENDUM n°2:
Non en fait, le changement d'encodage dans le terminal n'a pas l'air de marcher. MAIS, chose hallucinante, le résultat change suivant que la fenêtre du terminale est maximisée ou non....
taille normale cat donne une écriture en colonne sur plusieurs lignes et qui est presque potable
taille maximisée cat donne une écriture pourrie sur une ligne...
en gros le bord droit de la fenêtre fait retour charriot... pas très convaincant.
Dernière modification par jafrez (Le 05/11/2011, à 15:46)
Hors ligne
#4 Le 05/11/2011, à 16:12
- gerarmentor
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
Comme l'indique la commande "file", ce sont des retours chariot qui terminent les lignes (with CR line terminators)
Essaie donc :
cat mac.txt | tr '\r' '\n'
Hors ligne
#5 Le 05/11/2011, à 16:18
- Bousky
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
Cette page propose de petits scripts perl pour faire les conversion Mac ↔ Linux ↔ DOS / Windows.
Si tu utilises la technique de gerarmentor, ne redirige pas la sortie sur le fichier de départ, tu risquerais de l'effacer.
Dernière modification par Bousky (Le 05/11/2011, à 16:20)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#6 Le 05/11/2011, à 16:24
- jafrez
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
[RÉSOLU] GOT IT !!! hurlement de satisfaction !!! vous ne l'entendez pas ; les voisins si!
en même temps, en tripatouillant mon terminal et en lisant ce post-là, j'en étais arrivé à cette solution kif kif bouriquette,
cat -vet fichier.mac.txt | sed 's/\^M/\n/g' | sed 's/\^I/\t/g' > fichier.utf8.txt
la tienne, gerarmentor étant tout de même plus élégante mais toutefois je conseille la lecture de cet autre post à ce qui rencontreraient ce genre de pb.
GérarTOR, une question persiste : comment se fait-il que le
iconv -f ISOquelquechose ou latin1 -t utf8 fichier.mac.txt > fichier.utf8.txt
ne fonctionne pas.....
Ciao et merci
Dernière modification par jafrez (Le 05/11/2011, à 16:27)
Hors ligne
#7 Le 05/11/2011, à 17:50
- medoc
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
iconv ne resoud pas ton probleme parce que tu devait convertir des \r en \n et que ces caracteres sont conserves dans les deux encodages (les caracteres de controle sont les memes dans pratiquement tous les encodages).
Un texte ascii reste identique s'il est traduit en latinX ou en UTF-8. Tu ecris que tu n'as que des chiffres et des caracteres de controle dans ton fichier, donc c'est en fait de l'ascii, et iconv -f latin1 -t utf-8 ne fait rien.
Hors ligne
#8 Le 05/11/2011, à 18:08
- aduxas
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
cat -vet fichier.mac.txt | sed 's/\^M/\n/g' | sed 's/\^I/\t/g' > fichier.utf8.txt
Il y a quand-même quelque chose qui m'échappe: à quoi ça sert de remplacer les TAB par des ^I avec cat pour ensuite les remplacer par des TAB (\t) de nouveau ave sed? Il me semble que gerarmentor propose la bonne solution.
Hors ligne
#9 Le 05/11/2011, à 18:08
- jafrez
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
OK je pense que j'ai compris
si j'avais eu des caractères un peu spéciaux comme les accents par exemples, j'aurais eu besoin d'utiliser iconv pour passer dans le bon encodage
mais en l'occurence, j'avais des fichiers qui avait de codé un retour charriot sans changement de ligne et ça, ça ne dépend pas de l'encodage mais, de l'interpréteur graphique. et il a fallu que je parle doucement et gentillement au mien
___@Bousky
merci pour le lien intéressant. je pense que je ne suis pas au bout de mes peines et j'aurais peut-être un jour besoin de cette page qui est un bon mémo me semble-t-il.
___@Aduxas
indeed tu as raion, je me suis laissé influencer par le lien que je signale plus haut. La solution de germinator est mieux appropriée. il me semble que cat -vet fait apparaître les caractères de mise en forme dans le stdout ce qui me permet de les manipuler par la suite avec sed comme de simples caractères. Ce n'est pas la solution la plus simple, pour sûr surtout que le caractère tab était apparemment bien lu et qu'après je ne pouvais plus m'en dépétrer... j'avais tout à l'heure un peu de mal avec la commande tr parce que je n'avais pas bien compris la syntaxe et j'ai donc proposé une solution bourrin qui au final, il me semble, fait le même travail que la commande tr.
Adoptons donc la solution de Gérarmator!
Dernière modification par jafrez (Le 05/11/2011, à 18:17)
Hors ligne
#10 Le 05/11/2011, à 18:19
- jafrez
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
Au fait... merci à la communauté
Hors ligne
#11 Le 05/11/2011, à 18:32
- pingouinux
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
Bonjour,
@jafrez #1 :
Pour info, la boucle dans ton script était inutilement compliquée.
i=0
while read encodage
do
((i++))
echo $i $encodage
iconv -f $encodage -t utf8 mac.txt >mac.$i.txt
done <ICONV.list
Dernière modification par pingouinux (Le 05/11/2011, à 20:12)
Hors ligne
#12 Le 05/11/2011, à 18:44
- jafrez
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
OuaAaouh!!! qu'est ce que c'est que ce truc? C'est génial !
j'ai regardé le man read, c'est le file descriptor qui rend faux quand il est arrivé à la dernière ligne et qui affecte à la variable encodage la ligne de ICONV.list tant que celle-ci existe. le fichier ICONV.list passé en paramètre étant lu à la fin (!) grâce au symbol <
C'est ça?
Bravo en tout cas, ça c'est joliment écrit !
Dernière modification par jafrez (Le 05/11/2011, à 18:45)
Hors ligne
#13 Le 05/11/2011, à 19:05
- pingouinux
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
j'ai regardé le man read, c'est le file descriptor qui rend faux quand il est arrivé à la dernière ligne et qui affecte à la variable encodage la ligne de ICONV.list tant que celle-ci existe. le fichier ICONV.list passé en paramètre étant lu à la fin (!) grâce au symbol <
On lit une ligne à la fois, et on s'arrête quand on arrive à la fin du fichier. ICONV.list n'est pas un paramètre, mais est passé en STDIN à la boucle.
Hors ligne
#14 Le 05/11/2011, à 20:04
- jafrez
Re : [RÉSOLU] problème ENCODAGE pour lecture d'un fichier MACINTOSH
STDIN...
Super!
Hors ligne