Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

jafrez a écrit :
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é

smile

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

jafrez #12 a écrit :

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