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:
Sous Windows, on peut résoudre ce problème facilement en utilisant Notepad ++ pour convertir l'encodage en UTF-8, comme ci-dessous:
Et le résultat lisible correct est le suivant:
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 .
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:
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:
Cela ouvrira un autre menu qui inclut une liste de différents codages, comme indiqué ci-dessous. Maintenant, sélectionnez "Arabe (Windows 1256)":
Cela corrigera le texte charabia comme ceci:
Maintenant, cliquez à nouveau sur le bouton d'encodage et sélectionnez cette fois l'option "Enregistrer avec encodage", comme ci-dessous:
Et dans le nouveau menu, sélectionnez l’option "UTF-8":
Ceci sauvegardera le fichier corrigé en utilisant le codage UTF-8:
Terminé! :)
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.
Si vous aimez travailler dans une interface graphique à la place de la CLI, comme moi:
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é.
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 ...
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 !
Désolé, mes fichiers texte ont enfin été convertis. Ils sont maintenant tous convertis.
J'ai adoré le bloc-notes ++ aussi, mademoiselle encore.