OVH Cloud OVH Cloud

Gnus et encodage (toujours)

32 réponses
Avatar
SL
Bonjour,

J'ennuie tout le monde sur usenet avec un encodage fantaisiste :

<news:XnsD5D7EF8F723CFplam@nulle.invalid>

Sauriez vous comment éviter le multi-part ?

Voici la partie encodage de mon ".emacs" (qui pose d'ailleus des
problèmes hors gnus) :

(set-language-environment "iso-8859-1")
(prefer-coding-system 'iso-8859-1)
(set-w32-system-coding-system (quote iso-8859-1))
(setq current-language-environment (quote latin-1))
(setq default-buffer-file-coding-system 'latin-1-dos)
;; pour nxml
(setq buffer-file-coding-system 'latin-1-dos)
(set-keyboard-coding-system (quote latin-1-dos))
(setq keyboard-coding-system (quote latin-1-dos))
(setq terminal-coding-system (quote latin-1-dos))

Je n'ai rien mis sur l'encodage dans mon .gnus, par contre dans les
customizes je trouve des trucs comme :


Gnus Default Charset: Hide iso-8859-1

Gnus Default Posting Charset: Hide nil

Gnus Group Posting Charset Alist: Hide
INS DEL Permitted unencoded charsets:
Where: Value Menu Group: ^\(fido7\|relcom\)\.[^,]*\(,[
]*\(fido7\|relcom\)\.[^,]*\)*$
Header: Value Menu Charset: koi8-r
Body: Value Menu Charsets:
INS DEL Charset: koi8-r
INS
INS DEL Permitted unencoded charsets:
Where: Value Menu Mail message
Header: Value Menu None
Body: Value Menu None
INS DEL Permitted unencoded charsets:
Where: Value Menu News article
Header: Value Menu None
Body: Value Menu Any
INS


Une idée ?

SL

10 réponses

1 2 3 4
Avatar
SL
Sébastien Kirche a écrit :

N'empêche que cette façon d'emacs de ne pas savoir
reconnaitre un jeu d'encodage (le seul logiciel que je connaisse dans
ce cas) ne me rassure guère.



Faut pas. On peut tout faire avec Emacs et on peut le modifier comme on
veut, avec le risque de mal le paramétrer.

Il faut dire qu'à ses débuts il y a environ 30 ans, il n'avait pas
autant d'encodages à manipuler. Au fil du temps leur support a été
ajouté avec plus ou moins de bonheur. Dans l'avenir avec l'utilisation
d'unicode ces problèmes devraient disparaître.

Mais même avec les éditeurs de win, tu as déjà ouvert un fichier "de
l'époque du dos" (càd non encodé en ansi de windows) avec notepad ? Il y
a les mêmes problèmes avec les accents (page de code 437 vs. 850).



Franchement, j'ai des fichiers dans tous les jeux possibles, Unix
aussi bien que Windows, qui passent sans problème dans Vim (dont le
port sur Windows est incomparablement meilleur que celui d'emacs, au
passage) aussi bien que dans un (excellent) éditeur Windows comme
TextPad.

Je ne comprends pas qu'emacs se vautre à traiter du latin-1 comme de
l'utf-8.

Et encore, je m'empresse d'oublier les choses atterrantes que j'ai
aperçues sur la nécessité de mettre un en-tête en haut de certains
fichies pour préciser l'encodage...

Ok, je note ces indications. Inutiles de (mal) redéclarer ce qui
l'a déjà été par set-language-environment. Seulement entre
iso-8859-1-dos et iso-8859-1, il n'y a pas de différence cruciales
?



Pas de différence de codage de caractères. Le suffixe -dos indique
qu'avec cet encodage il va utiliser le retour à la ligne "dos" soit
cr+lf. Il existe le même encodage avec -unix (lf / 13) et -mac (cr / 10)
suivant la plateforme d'origine ou de destination du document à éditer.



Que ne l'aie-je su plus tôt...

> Tu peux tenter de le rouvrir en changeant de coding-system par C-x
> RET c avant de faire le C-x C-f et d'utiliser latin-1, latin-9 ou
> utf-8. Ça pourrait permettre de récupérer ton fichier.

J'avais essayer en précisant l'encodage avec C-x RET f sur le
fichier ouvert, est-ce la même chose ?



C-x RET f indique l'encodage à utiliser si possible pour le prochain
enregistrement et les suivants. Il ne modifie pas l'encodage courant.



Ok, noté.

Pour forcer l'encodage et en être sûr, il faut au choix :
- le préciser «en dur» dans le fichier par une variable de fichier
(-*- coding: latin-1-dos -*- au début ou un bloc «Local variables» à
la fin)



Ah ! seigneur, c'est ce dont je parlais plus haut. Franchement ce
n'est pas une solution satisfaisante ; il y a des formats de fichier
(XML pour ne pas le nommer) dans lesquels c'est impossible...

- le spécifier avant l'ouverture C-x RET c codage C-x C-f
- réouvrir le fichier avec C-x RET r codage (marche mal sur mon mac)



ok

Ensuite, j'ouvre un buffer, le « à » ne suscite pas de protestation,
mais *juste après* le « é » me vaut un buffer pop-up et une invitation
à préférer l'utf-8 sur l'iso-8859-1.



Tu n'as rien constaté de bizarre avec describe-coding-system à ce
moment ? Il doit y avoir un désaccord entre l'encodage du buffer et
celui du clavier.

Je ferme et rouvre emacs. Cette fois-ci le « é » passe. M-x
describe-coding-system : on est bien en iso-latin-1.

Je ferme et re-ouvre emacs. j'ouvre ~/.emacs. C-h C donne
iso-latin-1-dos (pourquoi ? Je ne demande plus de dos).



Parce que les sauts de lignes déjà enregistrés sont au format dos ?



ok

Emacs essaie de deviner quand c'est possible l'encodage d'un fichier à
l'ouverture. Parfois il se trompe (ex: distinguer latin-1 du latin-9
s'il n'y a pas d'euro ou de caractère spécifique latin-9).

Je rouvre un nouveau fichier en mode Text. Cette fois le à (première
lettre accentuée) ne passe plus, alors qu'elle passait tout à l'heure,
et les pop-up me proposent de remplacer l'iso-latin-1 (seul encodage
testé cette fois), par... du koi8-r, seigneur !



J'ai eu ce genre de soucis au début pour configurer emacs/gnus pour
manipuler correctement générer par défaut du latin-9 sur un mac alors
que l'encodage par défaut du système est mac-roman... On y arrive :)

> et peut-être aussi comment tes caractères accentués sont vus par
> emacs : C-u C-x = sur le caractère t'affichera des informations très
> utiles.

Sur le « à » qui cause des problèmes juste au dessus :

----

character: à (04340, 2272, 0x8e0)
charset: latin-iso8859-1
[...]
file code: E0 (encoded by coding system iso-latin-1)



Donc le caractère est bien en latin-1 ou iso-8859-1 maintenant il faut
vérifier le reste (buffer / clavier).

Ce que je trouve particulièrement savoureux c'est qu'il me range mon «
à » dans « latin-iso8859-1 », mais qu'il refuse d'utiliser ce charset
pour l'encoder (cela dit le C-x C-s après le C-u C-x = est passé, donc
peut être que c'était déjà réglé. J'ai voulu répéter toute
l'expérience (tantôt le à passe, tantôt non, toujours dans un buffer
en mode texte ouvert après l'ouverture / fermeture du .emacs, qui est
toujours reconnu comme du iso-8859-1-dos), et le à est bien toujours
classé comme du latin-1, même quand juste après il n'arrive pa sà
l'encoder.



Le problème vient peut-être d'un autre caractère qu'il ne sait pas
sauver en latin-1 ? Normalement quand il te demande un encodage
alternatif au moment de l'enregistrement, il te précise les caractères
qui lui posent problème.



Ah ? Ben non, là je vois rien de tel...
Avatar
SL
drkm a écrit :
SL writes:

- plein de modes (xml, nxml, java (jde), auctex, etc. etc. je ne
saurais pas les lister.)



Ça, c'est trivial à faire soi-même.



Oui bien sûr, mais ça se destine à des gens qui ne savant pas le
faire.

- plein de matériel TEI (les DTD / Schémas, les stylesheets)



Ça je connais pas. Mais ça ne doit pas être bien compliqué de
les récupérer soi-même. J'imagine que le consortium TEI propose
une archive rassemblant le tout.



oui, ou par cvs anonyme.

- pas mal des binaires les plus indispensables pour XML (xmllint,
xsltproc, tidy, xt, saxon, jing, catalog), quelques autre (grep).



Même remarque que pour les modes d'édition. En outre, il
semble donc qu'il y ai des doublons dans les logiciels installés.

- un paramétrage d'emacs pour en faire un outils d'édition de document
TEI : un menu "insert skeleton" par exemple, ce genre de chose, des
menus pour valider / transformer / etc.



C'est sans doute ici que tu auras le plus de soucis. Ne
proposent-ils pas ces fonctionnalités en tant que mode
indépendant à installer selon les règles habituelles ?



Ah mais je présentais l'ensemble pour répondre à ta question (qu'est
ce que c'est ?) ; personnellement je ne m'en sers pas trop de ces
menuss. Mais effectivement je ne sais pas où c'est défini cela dit.
Avatar
drkm
SL writes:

drkm a écrit :
SL writes:

- un paramétrage d'emacs pour en faire un outils d'édition de document
TEI : un menu "insert skeleton" par exemple, ce genre de chose, des
menus pour valider / transformer / etc.



C'est sans doute ici que tu auras le plus de soucis. Ne
proposent-ils pas ces fonctionnalités en tant que mode
indépendant à installer selon les règles habituelles ?



Ah mais je présentais l'ensemble pour répondre à ta question (qu'est
ce que c'est ?) ; personnellement je ne m'en sers pas trop de ces
menuss. Mais effectivement je ne sais pas où c'est défini cela dit.



Oui, j'avais compris. Mais d'après ce que je comprend, il y a
donc deux aspects : une compilation de choses existantes (modes
d'édition, programmes, etc.) et du code ELisp. Le premier aspect
peut être fait soi-même. Pour le second, cela dépend s'ils ont
bien fait la chose : s'ils l'ont développée comme un mode
« standalone », installable indépendamment comme tout mode, ou
bien comme un ensemble de sources disponibles uniquement dans
l'arbre d'installation de TEI-Emacs, ce qui rendrait la chose
plus complexe.

--drkm
Avatar
drkm
SL writes:

Sébastien Kirche a écrit :

Pour forcer l'encodage et en être sûr, il faut au choix :
- le préciser «en dur» dans le fichier par une variable de fichier
(-*- coding: latin-1-dos -*- au début ou un bloc «Local variables» à
la fin)



Ah ! seigneur, c'est ce dont je parlais plus haut. Franchement ce
n'est pas une solution satisfaisante ; il y a des formats de fichier
(XML pour ne pas le nommer) dans lesquels c'est impossible...



Comment ça ?

<?xml version="1.0"?> <!-- -*- coding: latin-1 -*- -->
<root/>

et :

<?xml version="1.0"?>
<root/>
<!-- Local Variables: -->
<!-- coding: latin-1 -->
<!-- End: -->

devraient tous deux fonctionner. Mieux, avec nXML, il suffit de
spécifier l'encodage dans la déclaration XML, par exemple :

<?xml version="1.0" encoding="ISO-8859-1"?>
<root/>

D'un autre côté, quelque soient tes réglages, si tu crées le
document XML suivant avec nXML, il le sauvegardera en UTF-8, et
il a raison :

<?xml version="1.0"?>
<root/>

--drkm
Avatar
SL
drkm a écrit :
SL writes:

Sébastien Kirche a écrit :



Pour forcer l'encodage et en être sûr, il faut au choix :
- le préciser «en dur» dans le fichier par une variable de fichier
(-*- coding: latin-1-dos -*- au début ou un bloc «Local variables» à
la fin)





Ah ! seigneur, c'est ce dont je parlais plus haut. Franchement ce
n'est pas une solution satisfaisante ; il y a des formats de fichier
(XML pour ne pas le nommer) dans lesquels c'est impossible...



Comment ça ?

<?xml version="1.0"?> <!-- -*- coding: latin-1 -*- -->
<root/>



Ah, je croyais que c'était au tout début ; mais franchement je n'ai
aucune envie de poluer des documents XML avec des trucs comme ça,
c'est complètement archaïque... Je change d'éditeur quand il faut en
venir à des choses pareilles.
Avatar
Sébastien Kirche
Le 14 septembre 2005 à 19:09, SL a formulé :

Franchement, j'ai des fichiers dans tous les jeux possibles, Unix
aussi bien que Windows, qui passent sans problème dans Vim (dont le
port sur Windows est incomparablement meilleur que celui d'emacs, au
passage) aussi bien que dans un (excellent) éditeur Windows comme
TextPad.



Pourtant, si l'encodage n'est pas indiqué explicitement par une
indication dans le fichier (vim le propose aussi il me semble) ou une
info de type BOM pour les fichiers utf, ils n'ont pas d'autre solution
que d'essayer de deviner comme le fait Emacs.

Il n'y a pas d'alternative, à moins de recoder (cf la commande recode
sous unix) le fichier dans un codage supporté par l'éditeur. À mon
boulot on a un outil maison qui permet cela pour passer de win à mac ou
unix et réciproquement. Moi j'utilise emacs pour y arriver de la même
façon.


Je ne comprends pas qu'emacs se vautre à traiter du latin-1 comme de
l'utf-8.



Le contraire, je comprends encore s'il n'y a pas de BOM, mais dans ce
sens-là... il y a un truc !

Et encore, je m'empresse d'oublier les choses atterrantes que j'ai
aperçues sur la nécessité de mettre un en-tête en haut de certains
fichies pour préciser l'encodage...



Ah, je n'ai pas dit que c'était une nécessité (voir plus bas), c'est une
possibilité pour arriver à un traitement correct.

> > Ok, je note ces indications. Inutiles de (mal) redéclarer ce qui
> > l'a déjà été par set-language-environment. Seulement entre
> > iso-8859-1-dos et iso-8859-1, il n'y a pas de différence cruciales
> > ?
>
> Pas de différence de codage de caractères. Le suffixe -dos indique
> qu'avec cet encodage il va utiliser le retour à la ligne "dos" soit
> cr+lf. Il existe le même encodage avec -unix (lf / 13) et -mac (cr /
> 10) suivant la plateforme d'origine ou de destination du document à
> éditer.

Que ne l'aie-je su plus tôt...



J'ai oublié de préciser que sans préciser -dos -unix ou -mac il prend le
format unix par défaut.

> Pour forcer l'encodage et en être sûr, il faut au choix :
> - le préciser «en dur» dans le fichier par une variable de fichier
> (-*- coding: latin-1-dos -*- au début ou un bloc «Local variables» à
> la fin)

Ah ! seigneur, c'est ce dont je parlais plus haut. Franchement ce
n'est pas une solution satisfaisante ;



Attention. C'est seulement une possibilité, si le contenu du fichier ne
permet pas de le déduire.

En fait c'est l'une des possibilités qui pour positionner le
coding-system à l'ouverture du fichier.

En fait soit à l'aide d'une séquence -*- variable: valeur; variable2:
valeur2; ... -*- dans les 2 premières lignes ou dans un bloc particulier
en fin de fichier (et qui peut se trouver dans des commentaires) on peut
indiquer à emacs des valeurs de paramètre ou l'utilisation de mode
localement à un fichier. Et c'est réutilisé à chaque ouverture.

Par exemple je m'en sers pour le coding, mais aussi pour indiquer la
position de la fill-column ou l'utilisation du mode outline.

Je t'invite à regarder le manuel à la section File Variables pour en
savoir plus :(Info "(Emacs)File variables")

il y a des formats de fichier (XML pour ne pas le nommer) dans
lesquels c'est impossible...



Pour l'édition xml, nXml s'en sort très bien avec l'encodage xml. Mais à
la rigueur on doit pouvoir utiliser -*- dans un commentaire <!-- -->

> Le problème vient peut-être d'un autre caractère qu'il ne sait pas
> sauver en latin-1 ? Normalement quand il te demande un encodage
> alternatif au moment de l'enregistrement, il te précise les
> caractères qui lui posent problème.

Ah ? Ben non, là je vois rien de tel...



Tiens ? Aucune explication du pourquoi il te demande de changer
l'encodage ?

--
Sébastien Kirche
Avatar
drkm
SL writes:

drkm a écrit :

<?xml version="1.0"?> <!-- -*- coding: latin-1 -*- -->
<root/>



Ah, je croyais que c'était au tout début ; mais franchement je n'ai
aucune envie de poluer des documents XML avec des trucs comme ça,
c'est complètement archaïque... Je change d'éditeur quand il faut en
venir à des choses pareilles.



D'un côté je comprend. Mais en l'occurrence, c'est normal. Tu
dis que ton document contient de l'UTF-8, alors qu'en fait c'est
du Latin-1. Il faut bien le préciser.

--drkm
Avatar
drkm
Sébastien Kirche writes:

Le 14 septembre 2005 à 19:09, SL a formulé :

Je ne comprends pas qu'emacs se vautre à traiter du latin-1 comme de
l'utf-8.



Le contraire, je comprends encore s'il n'y a pas de BOM, mais dans ce
sens-là... il y a un truc !



SL parlait d'XML. N'aurais-tu pas (SL) un document en Latin-1
avec une déclaration XML de la forme :

<?xml version="1.0"?>

? Si c'est le cas, alors c'est normal, tu dis que ton document
est en UTF-8.

il y a des formats de fichier (XML pour ne pas le nommer) dans
lesquels c'est impossible...



Pour l'édition xml, nXml s'en sort très bien avec l'encodage xml. Mais à
la rigueur on doit pouvoir utiliser -*- dans un commentaire <!-- -->



Oui. Mais j'imagine que SL faisait référence au fait que la
déclaration XML doit se trouver au début du document (plus
précisément, les 5 premiers caractères doivent être '<', '?',
'x', 'm' et 'l'). Mais comme le commentaire contenant les file
local variables doit juste être sur la première ligne (par
exemple juste après la déclaration XML), pas de problèmes.

--drkm
Avatar
SL
drkm a écrit :
SL writes:

drkm a écrit :



<?xml version="1.0"?> <!-- -*- coding: latin-1 -*- -->
<root/>





Ah, je croyais que c'était au tout début ; mais franchement je n'ai
aucune envie de poluer des documents XML avec des trucs comme ça,
c'est complètement archaïque... Je change d'éditeur quand il faut en
venir à des choses pareilles.



D'un côté je comprend. Mais en l'occurrence, c'est normal. Tu
dis que ton document contient de l'UTF-8, alors qu'en fait c'est
du Latin-1. Il faut bien le préciser.



Non non, je ne parle pas de situations comme celle ci-dessus où
l'encodage délaré (ou pas déclaré, ce qui est une forme de déclaration
de l'utf-8) n'est pas l'encodage réel : je n'avais pas remarqué que
dans l'exemple ci dessus du délarais (en XML) de l'utf-8 et (en emacs)
du latin 1. Là je n'ai à m'en prendre qu'à moi même, et d'ailleurs mon
document est mal formé ; je parle du fait de mettre ce genre
d'indication de l'encodage à destination de l'éditeur de texte : c'est
la première fois que je vois un éditeur avoir autant de mal à
reconnaître un encodage ; je ne comprends tout simplement pas, je n'ai
/jamais/ vu vim ou TextPad se tromper.
Avatar
SL
Sébastien Kirche a écrit :
Le 14 septembre 2005 à 19:09, SL a formulé :

Franchement, j'ai des fichiers dans tous les jeux possibles, Unix
aussi bien que Windows, qui passent sans problème dans Vim (dont le
port sur Windows est incomparablement meilleur que celui d'emacs, au
passage) aussi bien que dans un (excellent) éditeur Windows comme
TextPad.



Pourtant, si l'encodage n'est pas indiqué explicitement par une
indication dans le fichier (vim le propose aussi il me semble) ou une
info de type BOM pour les fichiers utf, ils n'ont pas d'autre solution
que d'essayer de deviner comme le fait Emacs.



Eh bien je ne comprends pas, je n'ai jamais vu un éditeur avoir autant
de mal. Peut être le poid de toute une tradition emacsienne avec le
jeu "mule" ?

Je ne comprends pas qu'emacs se vautre à traiter du latin-1 comme de
l'utf-8.



Le contraire, je comprends encore s'il n'y a pas de BOM, mais dans ce
sens-là... il y a un truc !



Oui, effectivement dans le mail à l'encodage corrompu que j'ai envoyé
plus haut c'était effectivmeent l'inverse : il traitait un caractère
encodé sur deux octets (utf-8) comme deux caractères (latin-1), docn
c'était dans le sens utf8->latin1.

Par exemple je m'en sers pour le coding, mais aussi pour indiquer la
position de la fill-column ou l'utilisation du mode outline.



Effectivement ça peut être intéressant... m'enfin ça vire au concept
de l'éditeur qui à son propre format de fichier, c'est quand même un
peu limite...

> Le problème vient peut-être d'un autre caractère qu'il ne sait pas
> sauver en latin-1 ? Normalement quand il te demande un encodage
> alternatif au moment de l'enregistrement, il te précise les
> caractères qui lui posent problème.

Ah ? Ben non, là je vois rien de tel...



Tiens ? Aucune explication du pourquoi il te demande de changer
l'encodage ?



Non, à chaque fois que j'ai le pop-up "ces encodages ont été
essayé... aucun d'eux ne permet d'encoder...", je n'ai aucune
indication sur le caractère en particulier qui a fait achopper
l'encodage. Peut être que c'est uniquement dans la dernière version
d'emacs ? (que je ne regrette pas d'avoir installé je dois dire :-)
1 2 3 4