Sortie sed illisible dans emacs

Résolu/Fermé
toshmanbazi Messages postés 4 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 25 décembre 2009 - 23 déc. 2009 à 18:11
toshmanbazi Messages postés 4 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 25 décembre 2009 - 25 déc. 2009 à 13:47
Bonjour,

Je fais de la saisie au kilomètre en utilisant l'éditeur emacs. Etant débutant et n'ayant pas eu le temps de me pencher sur la fonctionnalité abbrev de cet éditeur j'ai créé un petit script du type :

#!/bin/sed -f

s/ c / c'est /g
s/ pr / pour /g
s/ ccl / chocolat /g
...


quand je passe ce script sur le document que j'ai saisi et en orientant la sortie vers un fichier

$ ./script.sh texte.txt>nouveautexte.txt


ce dernier ouvert dans emacs me donne la représentation suivante :

Je g\303\250re une soci\303\251t\303\251...une qui a mont\303\251 sa soci\303\251t\303\251 une autre qui fait de l'\303\251conomie gestion la 3e qui pr\303\251pare m\303\251decine


Pour contourner le problème j'ouvre nouveautexte.txt dans oowriter (OpenOffice) et j'accepte l'encodage utf-8 que ce logiciel me propose. il me suffit d'appuyer sur ctrl+s pour l'enregistrer de nouveau et tout rentre dans l'ordre. Je peux désormais ouvrir mon fichier dans emacs en retrouvant les accents proprement représentés au lieu des '\303\251', '\303\250' et autres.

Ce que j'aimerais savoir c'est :

- pourquoi la sortie d'un script
#! /bin/sed -f
passé à travers le fichier
texte.txt: UTF-8 Unicode C++ program text, with very long lines
donne un fichier
nouveautexte.txt: Non-ISO extended-ASCII C++ program text, with very long lines
et y'aurait-il une solution pour traiter le problème à ce niveau là

- pourquoi emacs échoue là ou oowriter réussit en proposant un choix d'encodage

J'ai certainement mal lu l'info sed, mais je n'ai rien trouvé qui se rapporte à ce problème (sed serait-il réservé à l'anglais et aux langues non accentuées ? ) ; j'ai essayé quelques solutions de conversion à la volée mais celles ci m'ont donné encore plus de fil à retordre ;

En m'excusant d'avance si cette sollicitation est mal placée dans le forum, je compatis à tous ceux qui partagent ou ont partagé ma peine et remercie tous ceux qui pourront nous aider.
A voir également:

4 réponses

dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
24 déc. 2009 à 15:06
hello
en UTF, les caractrères spéciaux sont sur 2 octets
$ cat a
aaa
ééé
bbb
ààà
èèè
zzz
$ file a
a: UTF-8 Unicode text
$ od -c a
0000000   a   a   a  \n 303 251 303 251 303 251  \n   b   b   b  \n 303
0000020 240 303 240 303 240  \n 303 250 303 250 303 250  \n   z   z   z
0000040  \n
0000041

une quesion, veux-tu qu'emacs reconnaisse l'UTF-8, auquel cas : https://rene.seindal.dk/2004/08/07/gnu-emacs-and-utf-8-locale/
ou que le fichier ne soit pas en UTF-8 ?
0
toshmanbazi Messages postés 4 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 25 décembre 2009
25 déc. 2009 à 00:21
désolé d'avoir écorché ton pseudo dubcek
0
toshmanbazi Messages postés 4 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 25 décembre 2009
24 déc. 2009 à 23:27
Merci dubeck pour ta réponse,

J'ai suivi ta démonstration ainsi que le lien et ça m'a permis de réfléchir le problème autrement. Pour répondre à tes questions, j'aimerai pouvoir revisiter le fichier généré par le script de remplacements et retrouver les accents proprement représentés, or :

$ file *
a:           UTF-8 Unicode C program text, with very long lines
c:           empty
d.sh:       a /bin/sed -f script text executable
$ wc -l *
  930 a
    0 c
  366 d.sh
 1296 total
$ head a
cmbn à la mz ?
crstl 30 à la mz ... pain grillé br...
....
$ ./d.sh a>c
$ file *
a:           UTF-8 Unicode C program text, with very long lines
c:           Non-ISO extended-ASCII C program text, with very long lines, with LF, NEL line terminators
d.sh:       a /bin/sed -f script text executable
$ emacs -nw c
-----------------------------------------------------------------------------
Combien \303\240 la maison ?
Christ\303\250lle    : 30 \303\240 la maison ... pain grill\303\251 beurre...
-----------------------------------------------------------------------------



En creusant à partir de ta démonstration j'ai relevé les bizarreries suivantes :


$ >c
$ >b
$ file *
a:           UTF-8 Unicode C program text, with very long lines
b:           empty
c:           empty
d.sh:       a /bin/sed -f script text executable
$ head a>b
$ file *
a:           UTF-8 Unicode C program text, with very long lines
b:           UTF-8 Unicode text, with very long lines
c:           empty
d.sh:       a /bin/sed -f script text executable
$ ./d.sh b>c
$ file *
a:           UTF-8 Unicode C program text, with very long lines
b:           UTF-8 Unicode text, with very long lines
c:           UTF-8 Unicode text, with very long lines
d.sh:       a /bin/sed -f script text executable
$ emacs -nw c
-----------------------------------------------------------------------------
Combien à la maison ?
Christèlle    : 30 à la maison ... pain grillé beurre...

-----------------------------------------------------------------------------
$ head -728 a>b
$ ./d.sh b>c
$ file *
a:           UTF-8 Unicode C program text, with very long lines
b:           UTF-8 Unicode C program text, with very long lines
c:           UTF-8 Unicode C program text, with very long lines
d.sh:       a /bin/sed -f script text executable
$ head -729 a>b
$ ./d.sh b>c
$ file *
a:           UTF-8 Unicode C program text, with very long lines
b:           UTF-8 Unicode C program text, with very long lines
c:           Non-ISO extended-ASCII C program text, with very long lines
d.sh:       a /bin/sed -f script text executable
$ emacs -nw c
-----------------------------------------------------------------------------
Combien \303\240 la maison ?
Christ\303\250lle    : 30 \303\240 la maison ... pain grill\303\251 beurre...

-----------------------------------------------------------------------------




Ce que j'en déduis :
- il y a une limite du nombre de lignes au delà de laquelle le script de remplacements archaique ne peut aller sans générer un fichier Non-ISO qui n'est reconnu ni par emacs ni par vim ni par gedit. Seul oowriter tente de rétablir le bon encodage.

Solutions possibles :
- limiter le nombre de lignes de mes fichiers
- améliorer le script de remplacements

Encore merci
0
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
25 déc. 2009 à 09:42
je dirais que ce n'est pas le nombre de lignes mais la longueur with very long lines, normal si tu tapes au km, normal aussi pour OO writer, puisqu'un traitement de texte va automatiquement insérer les sauts de ligne.
essaye de couper les lignes, brutalement avec la commande fold ou en respectant les mots avec fmt
0
toshmanbazi Messages postés 4 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 25 décembre 2009
25 déc. 2009 à 13:47
Merci dubcek,


J'ai fini par trouver une solution.

Le script de remplacement se terminait par la commande 's/.^/\u&/' que j'ai pêchée sur l'excellente faq de commentçamarche afin de mettre la première lettre de chaque phrase en majuscule.

En remplaçant la séquence '\u' par '\U' le fichier généré est en UTF-8 comme je le souhaitais et je peux donc le réouvrir proprement avec mon éditeur préféré.

Je ne m'explique pas le phénomène, en tout cas notre échange m'a délivré d'une bonne épine et je t'en remercie doublement.

A bientôt
0