Encodage de lecture inapproprié : éditeur = vim-gtk3

debian 11 / Xfce

bonjour ,

lorsque j’ouvre avec vim-gtk3 le fichier .viminfo avec dans préférences du terminal Xfce encodage = UTF-8 j’obtiens un texte illisible . Pourtant ce fichier a été écrit avec un encodage UTF-8 comme indiqué :

1) commande : mm@Xfce:~$ vim .viminfo

2) affichage      :
# Ce fichier viminfo a été généré par Vim 8.2.
# Vous pouvez l'éditer, mais soyez prudent.

# Viminfo version
|1,4

# 'encoding' dans lequel ce fichier a été écrit
*encoding=utf-8

j’ai essayé d’autres encodages et c’est pire , il en reste des traces d’ailleurs car même en revenant à UTF-8 le texte s’est modifié :

 # Ce fichier viminfo a été généré par Vim 8.2.
# Vous pouvez l'éditer, mais soyez prudent.

c’est le seul cas où j’observe un problème avec UTF-8 , mais j’aimerais bien savoir d’où ça provient .

notes :

  • rien de tel avec le pager less , tout est clair
  • si je corrige par des " é " ou des " e " le problème revient
  • en fait si je supprime la 1ère phrase elle est régénérée à la prochaine édition ==> elle n’a pas été supprimée et donc ==> au temps pour moi car
mm@Xfce:~$ ls -l .viminfo 
-rw------- 1 mm mm 19196  2 févr. 18:25 .viminfo

avec les droits corrects les corrections par des " é " résistent bien . Reste uniquement le problème initial de l’encodage .

1 J'aime

Je dirai déjà savoir en quoi ton texte est encodé.

sudo apt install  python3-chardet

par exemple j’ai

limax@debian:~$ chardet texte1.txt 
texte1.txt: utf-8 with confidence 0.99
limax@debian:~$  chardet texte2.txt
texte2.txt: ISO-8859-1 with confidence 0.73

edit: encoding est pour lire pas pour sauvegarder.

 :set encoding - set the encoding used to read the file
 :set fileencoding - set the encoding to use when saving the file
 :set termencoding - set the encoding to use to display characters to your terminal

je pensais que la remarque dans .viminfo était suffisante car :

# 'encoding' dans lequel ce fichier a été écrit
*encoding=utf-8

et donc avec l’outil idoine ça donne :

mm@Xfce:~$ chardet .viminfo
.viminfo: utf-8 with confidence 0.99

alors là je sèche…

Comme tu as plusieurs caractères pour le é par exemple (2 octets de mémoire)
vim semble lire du latin1 (ou autre)

pas grave car tu viens de me donner la clé pour lire et utiliser une commande dans vim : " :set " ou plus généralement ":cmd " que je voyais dans le manuel d’utilisation et que je ne comprenais pas viennent enfin de devenir compréhensibles . Je viens d’essayer avec " :set number " et ça marche . Pas facile de domestiquer , même un peu , cet éditeur .

et donc merci pour la réponse qui fut fructueuse .

Tous ça ressemble fortement à de la configuration multiple de locale entre le système, les utilisateurs et les applications.

@zao
Quels sont les locales défini sur le système ?

mm@Xfce:~$ locale
LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=

mm@Xfce:~$ localectl status
   System Locale: LANG=fr_FR.UTF-8
       VC Keymap: n/a
      X11 Layout: fr
       X11 Model: pc105
     X11 Variant: latin9

mm@Xfce:~$ locale -a
C
C.UTF-8
fr_FR.utf8
POSIX

tu avais raison : c’est bien du Latin1 car si j’utilise ce que tu m’as donné comme commande

:set termencoding=Latin1

alors le texte devient clair .

note : je me suis aussi aidé de stackoverflow

et puis j’ai testé lacommande :set seule et :

:set
--- Options ---
  background=dark     helplang=fr         scroll=12           ttymouse=sgr
  filetype=viminfo    ruler               ttyfast
  backspace=indent,eol,start
  fileencoding=latin1
  fileencodings=ucs-bom,utf-8,default,latin1
.................

latin1 est bien là , non ? Pourquoi mélanger les encodages , dans quel but ? Et puis cette commande n’est-elle pas préférable à chardet dans le cas de vim ? En tout cas ces 2 commandes ne donnent pas le même résultat ( au moins apparemment )!!

au temps pour moi car :

You should set fileencodings to the different encodings vim should try when opening a file, for example:

set fileencodings=ucs-bom,utf-8,latin1

provient de stackoverflow.

épilogue : j’ai rajouté 2 lignes à .vimrc ( note : en fait j’ai corrigé et n’ai laissé que la ligne utf-8 )

set fileencoding=utf-8
set fileencoding=latin1

ça a l’air de fonctionner correctement , vim faisant le bon choix lui-même : testé sur seulement 2 fichiers , dont le fautif , donc , à suivre .

sauf qu’avec un autre debian 11 ça ne marche pas .

En fait j’ai 3 installations debian 11 et 3 réponses différentes pour ce fichier généré par vim :

  • 2 écrivent en latin1 : 1 peut être corrigé par set filencoding=utf-8 mais pas l’autre
  • 1 écrit en utf-8 et donc la lecture dans le terminal est correcte

en reprenant les commentaires de stackoverflow , que j’avais mal interprétés d’ailleurs , la solution qui m’assure que la fabrication de ce fichier sera bien en utf-8 , même pour le récalcitrant , est de ne pas laisser le choix de l’encodage et d’imposer , dans le fichier .vimrc set fileencodings=utf-8 .
Je pense qu’il y a donc un autre problème plus basique et que je ne corrige que le symptôme . Mais bon , en tant qu’éditeurs purs les 3 vim ( je suis repassé à vim ) fonctionnent très bien et c’est le principal .