OVH Cloud OVH Cloud

Encodage des buffers

4 réponses
Avatar
SL
Bonjour,

Je me casse les dents sur des problèmes de jeux de caractères.

Je voudrais encoder mes fichiers en latin-1, afin d'éviter les messages
comme quoi les caractères de mon buffer ne peuvent pas être encodés. Mon
.emacs est orthodoxe je crois :

(setq keyboard-coding-system (quote latin-1))
(setq terminal-coding-system (quote latin-1))
(setq current-language-environment (quote latin-1))
(setq default-buffer-file-coding-system 'latin-1)

Et pourtant les nouveaux fichiers que je crée sont en "mule-utf-8", quand ce
n'est pas "emacs-mule-dos".

Avec C-h C je m'aperçois que mon jeux de caractères par défaut pour les
nouveau fichier n'est toujours pas le 8859-1, malgré
"default-buffer-file-coding-system" de mon emacs, mais "mule-utf-8" (une
horreur, probablement) :

------- C-h C sur un nouveau fichier :-----------------------------

Coding system for saving this buffer:
u -- mule-utf-8 (alias: utf-8)
Default coding system (for new files):
u -- mule-utf-8 (alias: utf-8)
Coding system for keyboard input:
nil
Coding system for terminal output:
1 -- iso-latin-1 (alias: iso-8859-1 latin-1)

[..]

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

Enfin si je fais "C-x RET f RET latin-1" pour forcer mon buffer à s'encoder
en latin-1, le minibuffer me répond (comble de l'insolence) : "cannot encode
some characters with latin-1" !

--------

Par ailleurs je ne comprends pas pourquoi il y a un "iso-8859-1-dos"
"iso-8859-1-unix", "iso-8859-1-mac" ET un "iso-8859-1" sans rien. Si on
demande "latin-1", est-ce différent des trois espèces "latin-1-dos/unix/mac"
?

Pour régler tous ces problèmes, auriez vous en tête une documentation claire
sur ce sujet ? Le manuel d'emacs ne m'aide pas du tout.

Sylvain

4 réponses

Avatar
SL
Par ailleurs je ne comprends pas pourquoi il y a un "iso-8859-1-dos"
"iso-8859-1-unix", "iso-8859-1-mac" ET un "iso-8859-1" sans rien. Si on
demande "latin-1", est-ce différent des trois espèces


"latin-1-dos/unix/mac"
?



Plus précisément : je suis sous Windows, le problème est peut être qu'avec
les "latin-1" de mon .emacs il essaye d'encoder en latin-1-unix, et qu'il
faudrait lui demander latin-1-dos ?

S
Avatar
Pascal Bourguignon
"SL" writes:
Je voudrais encoder mes fichiers en latin-1, afin d'éviter les messages
comme quoi les caractères de mon buffer ne peuvent pas être encodés. Mon
.emacs est orthodoxe je crois :

(setq keyboard-coding-system (quote latin-1))
(setq terminal-coding-system (quote latin-1))
(setq current-language-environment (quote latin-1))
(setq default-buffer-file-coding-system 'latin-1)



J'ajouterais:

(set-language-environment "Latin-1") ; Latin-9 pour l'euro
(prefer-coding-system 'iso-8859-1) ; iso-8859-15 pour l'euro


Enfin si je fais "C-x RET f RET latin-1" pour forcer mon buffer à s'encoder
en latin-1, le minibuffer me répond (comble de l'insolence) : "cannot encode
some characters with latin-1" !



Voici la liste des caractères ISO-8859-1. Si tu tape un caractère qui
n'est pas dans cette liste (comme le symbole euro par exemple), c'est
foutu.

Le premier caractère est un espace normal:

! " # $ % & ' ( ) * + , - . /
0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O
P Q R S T U V W X Y Z [ ] ^ _
` a b c d e f g h i j k l m n o
p q r s t u v w x y z { | } ~


Le premier caractère est un espace insécable:
  ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯
° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
à á â ã ä å æ ç è é ê ë ì í î ï
ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ


Par ailleurs je ne comprends pas pourquoi il y a un "iso-8859-1-dos"
"iso-8859-1-unix", "iso-8859-1-mac" ET un "iso-8859-1" sans rien. Si on
demande "latin-1", est-ce différent des trois espèces "latin-1-dos/unix/mac"
?



L'encodage des _caractères_ est le même dans ces quatre codes. Mais
l'encodage du passage à la ligne est différent:

newline
mac carriage-return, (CR, 13, 0x0D)
unix line-feed, (LF, 10, 0x0A)
dos carriage-return suivi de line-feed, (CR-LF, 13 10, 0x0D 0x0A)


Pour régler tous ces problèmes, auriez vous en tête une documentation claire
sur ce sujet ? Le manuel d'emacs ne m'aide pas du tout.



Peut être la norme ISO-8859-1 ? http://en.wikipedia.org/wiki/ISO_8859-1

--
__Pascal Bourguignon__
Avatar
Pascal Bourguignon
"SL" writes:

> Par ailleurs je ne comprends pas pourquoi il y a un "iso-8859-1-dos"
> "iso-8859-1-unix", "iso-8859-1-mac" ET un "iso-8859-1" sans rien. Si on
> demande "latin-1", est-ce différent des trois espèces
"latin-1-dos/unix/mac"
> ?

Plus précisément : je suis sous Windows, le problème est peut êtr e qu'avec
les "latin-1" de mon .emacs il essaye d'encoder en latin-1-unix, et qu'il
faudrait lui demander latin-1-dos ?



Ça n'a aucun rapport avec l'OS, emacs utilise l'encodage qu'on lui dit
d'utiliser par défaut, ou celui du fichier lu. (Voir à gauche de la
ligne d'état l'indicateur (DOS) ou (MAC) quand ce n'est pas unix).

--
__Pascal Bourguignon__
Avatar
SL
> Je voudrais encoder mes fichiers en latin-1, afin d'éviter les messages
> comme quoi les caractères de mon buffer ne peuvent pas être encodés. Mon
> .emacs est orthodoxe je crois :
>
> (setq keyboard-coding-system (quote latin-1))
> (setq terminal-coding-system (quote latin-1))
> (setq current-language-environment (quote latin-1))
> (setq default-buffer-file-coding-system 'latin-1)

J'ajouterais:

(set-language-environment "Latin-1") ; Latin-9 pour l'euro
(prefer-coding-system 'iso-8859-1) ; iso-8859-15 pour l'euro



Adopté, mes nouveaux fichiers sont bien en latin-1.

> Enfin si je fais "C-x RET f RET latin-1" pour forcer mon buffer à


s'encoder
> en latin-1, le minibuffer me répond (comble de l'insolence) : "cannot


encode
> some characters with latin-1" !

Voici la liste des caractères ISO-8859-1. Si tu tape un caractère qui
n'est pas dans cette liste (comme le symbole euro par exemple), c'est
foutu.



Je pense que mes buffers étaient encodables en latin-1, en tout cas je suis
sûr qu'il n'y avait pas de ligature oe. En tout cas le problème a disparu
avec ces deux nouvelles variables.

L'encodage des _caractères_ est le même dans ces quatre codes. Mais
l'encodage du passage à la ligne est différent:

newline
mac carriage-return, (CR, 13, 0x0D)
unix line-feed, (LF, 10, 0x0A)
dos carriage-return suivi de line-feed, (CR-LF, 13 10, 0x0D


0x0A)


> Pour régler tous ces problèmes, auriez vous en tête une documentation


claire
> sur ce sujet ? Le manuel d'emacs ne m'aide pas du tout.

Peut être la norme ISO-8859-1 ? http://en.wikipedia.org/wiki/ISO_8859-1



Merci !
Sylvain