web-dev-qa-db-fra.com

Convertir le codage de fichier texte

Je rencontre fréquemment des fichiers texte (tels que des fichiers de sous-titres dans ma langue maternelle, persan ) avec des problèmes d’encodage des caractères. Ces fichiers sont créés sous Windows et enregistrés avec un encodage inadéquat (qui semble être ANSI), qui a l'air chaotique et illisible, comme ceci:

enter image description here

Sous Windows, on peut résoudre ce problème facilement en utilisant Notepad ++ pour convertir l'encodage en UTF-8, comme ci-dessous:

enter image description here

Et le résultat lisible correct est le suivant:

enter image description here

J'ai beaucoup cherché une solution similaire sous GNU/Linux, mais malheureusement les solutions suggérées (par exemple cette question ) ne fonctionnent pas. Surtout, j'ai vu des gens suggérer iconv et recode mais Je n'ai pas eu de chance avec ces outils. J'ai testé de nombreuses commandes, y compris les suivantes, et toutes ont échoué:

$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt 

Aucun de ceux-ci n'a fonctionné!

J'utilise Ubuntu-14.04 et je recherche une solution simple (GUI ou CLI) qui fonctionne exactement comme Notepad ++.

Un aspect important d'être "simple" est que l'utilisateur n'est pas obligé de déterminer le codage source; le codage source devrait plutôt être automatiquement détecté par l'outil et seul le codage cible devrait être fourni par l'utilisateur. Néanmoins, je serai également heureux de connaître une solution efficace qui nécessite le codage source.

Si quelqu'un a besoin d'un scénario de test pour examiner différentes solutions, l'exemple ci-dessus est accessible via ce lien .

14
Seyed Mohammad

La solution de travail que j'ai trouvée utilise l’éditeur de texte Microsoft Visual Studio Code qui est un logiciel gratuit disponible pour Linux.

Ouvrez le fichier que vous voulez convertir son encodage en VS-Code. Au bas de la fenêtre, il y a quelques boutons. L'un d'eux est lié au codage du fichier, comme indiqué ci-dessous:

enter image description here

En cliquant sur ce bouton, un menu principal contenant deux éléments apparaît. Dans ce menu, sélectionnez l’option "Réouvrir avec codage", comme ci-dessous:

enter image description here

Cela ouvrira un autre menu qui inclut une liste de différents codages, comme indiqué ci-dessous. Maintenant, sélectionnez "Arabe (Windows 1256)":

enter image description here

Cela corrigera le texte charabia comme ceci:

enter image description here

Maintenant, cliquez à nouveau sur le bouton d'encodage et sélectionnez cette fois l'option "Enregistrer avec encodage", comme ci-dessous:

enter image description here

Et dans le nouveau menu, sélectionnez l’option "UTF-8":

enter image description here

Ceci sauvegardera le fichier corrigé en utilisant le codage UTF-8:

enter image description here

Terminé! :)

0
Seyed Mohammad

Ces fichiers Windows avec du texte persan sont codés selon Windows-1256. Donc, il peut être déchiffré par une commande similaire à OP essayé, mais avec des jeux de caractères différents. À savoir:

recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(dénoncé à la suite de plaintes de l’affiche originale; voir les commentaires)

iconv -f Windows-1256 Windows_file.txt > UTF8_file.txt

Celui-ci suppose que la variable d'environnement LANG est définie sur les paramètres régionaux UTF-8. Pour convertir en un codage quelconque (UTF-8 ou autre), quel que soit l'environnement local actuel, on peut dire:

iconv -f Windows-1256 Windows_file.txt -t ${output_encoding} > ${output_file}

L’affiche originale est également confondue avec la sémantique des outils de recodage de texte (recodage, iconv). Pour le codage source ( source .. ou -f), vous devez spécifier le codage avec lequel le fichier est enregistré (par le programme créé le). Pas certaines suppositions (naïves) basées sur des personnages mojibake dans des programmes qui essaient (mais échouent) de le lire. Essayer ISO-8859-15 ou WINDOWS-1252 pour un texte persan était évidemment une impasse: ces encodages ne contiennent simplement aucune lettre persane.

11
Incnis Mrsi

Si vous aimez travailler dans une interface graphique à la place de la CLI, comme moi:

  1. Ouvrir le fichier avec Geany (éditeur)
  2. Allez dans le menu Fichier -> Recharger sous
  3. Choisissez le codage supposé pour changer le charabia en caractères identifiables dans votre langue. Par exemple, pour lire les sous-marins grecs, je rechargerais sous le nom Europe occidentale -> grec (Windows-1253)
  4. Allez à Document menu> Définir le codage -> nicode -> TF-8
  5. Sauvegarder
1
Christos

Comme solution complémentaire au problème, j'ai préparé un script Bash utile basé sur la commande iconv de réponse d'Innis Mrsi :

#!/bin/bash

if [ $# -lt 1 ]
then
   echo 'Specify at least one file to fix.'
   exit 1
fi

# Temp file to store conversion attempt(s).
tmp='tmp.fixed'

for file in "$@"
do
  # Try to fix the file encoding.
  if iconv -f WINDOWS-1256 "$file" -t UTF-8 > $tmp; then
    echo "Fixed: '$file'"
    cat $tmp > "$file"
  else
    echo "Failed to fix: '$file'"
  fi
done
rm $tmp

Enregistrez ce script sous le nom fix-encoding.sh, accordez-lui l'autorisation d'exécution à l'aide de chmod +x fix-encoding.sh et utilisez-le comme suit:

./fix-encoding.sh myfile.txt my2ndfile.srt my3rdfile.sub

Ce script essaiera de corriger l'encodage d'un nombre quelconque de fichiers, il est fourni en entrée. Notez que les fichiers seront corrigés sur place, ainsi le contenu sera écrasé.

1
Seyed Mohammad

Mis à part iconv, qui est un outil très utile, seul ou dans un script, il existe une solution très simple que j'ai trouvée en essayant de résoudre le même problème pour les jeux de caractères grecs (Windows-1253 + ISO-8859-7).

Tout ce que vous avez à faire est d'ouvrir le fichier texte via la boîte de dialogue "Ouvrir" de Gedit et et non en double-cliquant dessus . Au bas de la boîte de dialogue, un menu déroulant pour le codage est défini sur "Détecté automatiquement" . Changez-le en "Windows-125x" ou en un autre jeu de codes approprié et le texte sera parfaitement lisible dans Gedit. Vous pouvez ensuite l'enregistrer en utilisant le codage UTF-8, juste pour vous assurer que vous n'aurez plus le même problème à l'avenir ...

1
Giorgos_tph

Je ne sais pas si cela fonctionne avec le farsi: j'utilise Gedit, il y a une faute avec un mauvais encodage, et je peux choisir ce que je veux traduire en UTF-8, c'était simplement du format texte non éclairé, mais voici une capture d'écran !

enter image description here

Désolé, mes fichiers texte ont enfin été convertis. Ils sont maintenant tous convertis.

J'ai adoré le bloc-notes ++ aussi, mademoiselle encore.

1
Ken Mollerup