pb de codage à l'affichage

Le
François Patte
Bonjour,


J'ai un pb avec un vieux fichier: quand je l'ouvre avec emacs, les
caractère accentués apparaissent sous la forme un-nombre:

205=à
212=è
340=ā

etc.

Evidemment (?!) il ne s'agit pas de suivi d'un nombre (je veux dire
saisie clavier) et je ne peux donc pas remplacer ces caractères en
utilisant Echap-%

Quelqu'un sait-il comment déterminer le codage utilisé dans le fichiers
et comment le convertir, soit dans Emacs, soit en utilisant iconv,
utrac. que sais-je?

Merci pour votre aide.

PS. A la place de U (ou 1) indiquant le codage, emacs met un t
--
François Patte
Université Paris Descartes
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
S
Le #26006422
Le 25 February 2014 à 18:04, François Patte a tapoté :

Bonjour,



Bonjour,

J'ai un pb avec un vieux fichier: quand je l'ouvre avec emacs, les
caractère accentués apparaissent sous la forme un-nombre:

205=à
212=è
340=ā

etc.



Alors 205 c'est de l'octal, ça correspond à 133 ou 85h, comme 2 12
correspond à 138 ou 8ah.

Si j'en crois ma référence sur les encodages, de bons candidats s eraient
les codages MSDOS 437 (US) et 850 (Western Europe) qui ont 'à' et 'à ¨' à
cette place (pour le 'ā' je ne sais pas ou alors mes yeux me
trahissent).

Evidemment (?!) il ne s'agit pas de suivi d'un nombre (je veux dire
saisie clavier...) et je ne peux donc pas remplacer ces caractères en
utilisant Echap-%



Non c'est la façon dont Emacs affiche les caractères pour lesquel s il ne
sait pas quelle est la représentation, parce qu'il ne connaît pas
l'encodage du fichier : c'est la valeur octale (par défaut) du caract ère.

Il est possible de rechercher un caractère par sa valeur : il faut pas ser
par C-q lors de la saisie suivi de la valeur, par exemple C-s C-q 212 RET

Mais, il vaut mieux ne pas remplacer les caractères manuellement (on
risque d'en louper) mais relire le fichier dans le bon encodage (voir
plus bas).

Je ne me rappelle plus si on peut changer la base pour l'affichage, par
contre on peut choisir la base utilisée avec C-q

;; choix de la base décimale pour la saisie de caractères quo tés (C-q n°)
(setq read-quoted-char-radix 10)

Quelqu'un sait-il comment déterminer le codage utilisé dans le
fichiers et comment le convertir, soit dans Emacs, soit en utilisant
iconv, utrac.... que sais-je?



Directement dans Emacs, pour lui dire de relire avec un autre encodage
que celui qu'il a utilisé par défaut : C-x RET r cp437 RET et con firmer
(pour la version US).

Si ce n'est pas bon, réessayer avec cp850 qui était la version po ur les
accents français sour DOS.

Pour ensuite sauver le fichier dans un autre encodage :
C-x RET f utf-8 RET C-x C-s

Je donne un exemple avec utf8 mais pour l'encodage natif sous Windows,
ce serait windows-1252.

PS. A la place de U (ou 1...) indiquant le codage, emacs met un t



C'était une indication, en survolant le 't' avec la souris, on peut li re
"Buffer coding system (multi-byte): raw-text-dos

HTH.
--
Sébastien Kirche
François Patte
Le #26009682
Le 25/02/2014 19:04, S�bastien Kirche a écrit :
Le 25 February 2014 à 18:04, François Patte a tapoté :

Bonjour,



Bonjour,

J'ai un pb avec un vieux fichier: quand je l'ouvre avec emacs, les
caractère accentués apparaissent sous la forme un-nombre:

205=à
212=è
340=ā

etc.



Alors 205 c'est de l'octal, ça correspond à 133 ou 85h, comme 212
correspond à 138 ou 8ah.

Si j'en crois ma référence sur les encodages, de bons candidats seraient
les codages MSDOS 437 (US) et 850 (Western Europe) qui ont 'à' et 'è' à
cette place (pour le 'ā' je ne sais pas ou alors mes yeux me
trahissent).

Evidemment (?!) il ne s'agit pas de suivi d'un nombre (je veux dire
saisie clavier...) et je ne peux donc pas remplacer ces caractères en
utilisant Echap-%



Non c'est la façon dont Emacs affiche les caractères pour lesquels il ne
sait pas quelle est la représentation, parce qu'il ne connaît pas
l'encodage du fichier : c'est la valeur octale (par défaut) du caractère.

Il est possible de rechercher un caractère par sa valeur : il faut passer
par C-q lors de la saisie suivi de la valeur, par exemple C-s C-q 212 RET

Mais, il vaut mieux ne pas remplacer les caractères manuellement (on
risque d'en louper) mais relire le fichier dans le bon encodage (voir
plus bas).

Je ne me rappelle plus si on peut changer la base pour l'affichage, par
contre on peut choisir la base utilisée avec C-q

;; choix de la base décimale pour la saisie de caractères quotés (C-q n°)
(setq read-quoted-char-radix 10)

Quelqu'un sait-il comment déterminer le codage utilisé dans le
fichiers et comment le convertir, soit dans Emacs, soit en utilisant
iconv, utrac.... que sais-je?



Directement dans Emacs, pour lui dire de relire avec un autre encodage
que celui qu'il a utilisé par défaut : C-x RET r cp437 RET et confirmer
(pour la version US).




Merci pour cette réponse mais vraiment je n'y arrive pas: en faisant

C-x RET r

et en essayant plusieurs codages proposés en activant la liste de
complétions possibles proposée dans le "minibuf", je n'arrive pas à
trouver mon bonheur: des tas de caractères étranges se substituent aux
caractères codés par des 303 etc.

Pourtant ce fichier a été créé (par moi-même) sous unix/linux (je ne
sais plus si linux était déjà en service à l'université) en tous cas
avant l'arrivée des diverses "locales" fr_FR, fr_FR-utf8.... etc.

Comment peut-on retrouver l'encodage d'origine?

D'autre par, j'ai essayé de remplacer les caractères xyz par le
caractère correspondant saisi au clavier (é, è ou à, etc.) et sauver le
fichier en utf8, mais cela ne change rien, je veux dire en rouvrant le
fichier, les caractères que j'ai remplacés (et qui apparaissaient
"normaux": é, è, à ...) apparaissent, en réouvrant le fichier, sous la
forme szd, quand ce n'est pas sous forme composée: hjkoiu ...

Merci pour toute aide.

--
François Patte
Université Paris Descartes
Pascal J. Bourguignon
Le #26009772
François Patte
Comment peut-on retrouver l'encodage d'origine?



Il n'y a pas d'algorithme, seulement des heuristiques.

Ce que je fait c'est:

iconv -l|sed -e 's-//--' | while read coding ; do
echo =========================================== echo $coding
echo =========================================== iconv -f $coding -t utf-8 # en supposant un terminal utf-8
done

et je cherche de visu un encodage qui donne un résultat sensé.

Ensuite, il suffit de taper:

C-x RET c <l'encodage du fichier> RET C-x C-f le-fichier RET

et d'insérer un commentaire sur la première ou la deuxième ligne
contenant:

-*- coding:utf-8 -*-

et d'enregistrer.



--
__Pascal Bourguignon__
http://www.informatimago.com/
"Le mercure monte ? C'est le moment d'acheter !"
Nicolas Richard
Le #26009812
François Patte
Comment peut-on retrouver l'encodage d'origine?



Les cas désagréables c'est quand une partie du fichier est encodée dans
un système, une autre dans un autre système, éventuellement avec des
ré-encodage foirés... et là ça devient difficile à automatiser.

Sinon, "utrac -P fichier" permet d'obtenir une liste d'encodages
"probables" avec un score pour chaque encodage. (utrac ne semble
malheureusement plus maintenu et souffre de quelques bugs, mais ça coute
rien d'essayer.)

--
Nico.
Publicité
Poster une réponse
Anonyme