Sortie sed illisible dans emacs
Résolu
toshmanbazi
Messages postés
5
Statut
Membre
-
toshmanbazi Messages postés 5 Statut Membre -
toshmanbazi Messages postés 5 Statut Membre -
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 :
quand je passe ce script sur le document que j'ai saisi et en orientant la sortie vers un fichier
ce dernier ouvert dans emacs me donne la représentation suivante :
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
- 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.
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 -fpassé à travers le fichier
texte.txt: UTF-8 Unicode C++ program text, with very long linesdonne un fichier
nouveautexte.txt: Non-ISO extended-ASCII C++ program text, with very long lineset 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:
- Sortie sed illisible dans emacs
- Word a trouvé du contenu illisible - Guide
- Remettre un pc en sortie d'usine - Guide
- Airpods 3 date de sortie - Guide
- Samsung a33 date de sortie - Guide
- Iphone 14 date de sortie - Guide
4 réponses
hello
en UTF, les caractrères spéciaux sont sur 2 octets
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 ?
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 ?
toshmanbazi
Messages postés
5
Statut
Membre
désolé d'avoir écorché ton pseudo dubcek
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 :
En creusant à partir de ta démonstration j'ai relevé les bizarreries suivantes :
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
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
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
essaye de couper les lignes, brutalement avec la commande fold ou en respectant les mots avec fmt
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
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