web-dev-qa-db-fra.com

Comment convertir un fichier texte avec un mélange d'encodages en un seul encodage?

  1. J'ai créé un fichier texte en copiant ses différentes parties à partir de sources différentes (pages Web, autres fichiers texte, fichiers pdf) dans gedit et en les enregistrant dans le fichier. Je suppose que c'est la raison pour laquelle j'ai plusieurs encodages dans le fichier texte, mais je ne suis pas sûr. Comment éviter de créer un fichier texte avec des codages mixtes en copiant ses différentes parties à partir de différentes sources dans gedit?
  2. Chaque fois que j'ouvre le fichier dans gedit, gedit peut toujours afficher ou décoder correctement chaque partie du texte. Il semble que gedit puisse gérer un fichier texte avec des encodages mixtes, mais je ne suis pas sûr.

    Mais lorsque j'ouvre le fichier dans emacs, il y aura des caractères qui ne peuvent pas être affichés correctement. (Je ne suis pas sûr de savoir pourquoi emacs ne peut pas faire cela.) J'aimerais donc convertir le fichier d'encodages mixtes en un encodage unique tel que utf-8.

    Puisque je pense que gedit peut détecter les bons encodages pour différentes parties du fichier texte, et je ne sais pas s’il existe d’autres applications pouvant le faire, serait-il possible de demander à gedit de convertir le fichier en utf-8, ou au moins me dire quel encodage il trouve pour quelle partie du fichier?

Merci.

3
Tim

Hmmm ... pour être honnête, le concept d'un fichier avec différents encodages est quelque peu bancal. Si vous avez un peu de temps, cet article (et celui-ci ) valent la peine d'être lus.

Pour Linux, un fichier est une séquence d'octets. Si vous demandez à un programme de l'interpréter en tant que fichier texte, il le fera en mappant les octets et les caractères; cette cartographie est l'encodage. Presque tous les éditeurs de texte que je connais (pas les traitements de texte!) Comprennent simplement le concept de codage unique pour un fichier.

Je ne suis pas expert en gedit; peut-être fait-il quelque chose de magique comme essayer de détecter automatiquement l'encodage ligne par ligne ou bloc de texte par bloc de texte ... si c'est le cas, vous pouvez essayer de faire la même chose en utilisant enca (1):

 while read line; do echo $line | enconv -L none -x utf8; done < text.mixed > text.utf8

... mais cela dépend de la capacité de Enca à deviner votre encodage (fonctionne presque bien avec l’Europe de l’Est, mais pas avec le Latin1, par exemple).

(1) C'est dans le dépôt, installez-le simplement avec Sudo apt-get enca.

2
Rmano

J'ai eu le même problème et résolu avec Emacs. La solution est citée de ici :

Une autre solution possible consiste à marquer chaque région par des caractères chinois et à la recoder avec M-x recode-region, en donnant "Text was into in" comme utf-16-le et "mais interprété comme" comme utf-16-be.

Une autre consiste à diviser les deux parties ayant des codages différents, à les copier dans des fichiers différents, à convertir le codage de l'une et à l'ajouter à l'autre. Dans mon cas, cela fonctionnait avec Atom, mais pas avec Notepad ++ (utf16-le/be).

1
giordano