Je rencontre fréquemment des fichiers texte (tels que des fichiers de sous-titres dans ma langue maternelle, le persan ) avec des problèmes d'encodage de caractères. Ces fichiers sont créés sur Windows et enregistrés avec un encodage inapproprié (semble être ANSI), qui semble charabia et illisible, comme ceci:
Dans Windows, on peut résoudre cela facilement en utilisant Notepad ++ pour convertir l'encodage en UTF-8, comme ci-dessous:
Et le résultat lisible correct est comme ceci:
J'ai beaucoup cherché une solution similaire sur 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
Rien de tout cela 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 tenu de déterminer le codage source; le codage source doit plutôt être automatiquement détecté par l'outil et seul le codage cible doit être fourni par l'utilisateur. Mais néanmoins, je serai également heureux de connaître une solution qui nécessite le codage source.
Si quelqu'un a besoin d'un cas de test pour examiner différentes solutions, l'exemple ci-dessus est accessible via ce lien .
vim '+set fileencoding=utf-8' '+wq' file.txt
.iso-639
mais cela ne semble pas être disponible eniconv
ourecode
. Au moins, je ne le vois pas dans la sortie deiconv -l
.vim
mais cela n'a pas fonctionné.Réponses:
Ces fichiers Windows avec du texte persan sont encodés dans Windows-1256 . Il peut donc être déchiffré par une commande similaire à OP essayée, mais avec des jeux de caractères différents. À savoir:
recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(dénoncé suite aux plaintes de l'affiche originale; voir commentaires)
Celui-ci suppose que la variable d'environnement LANG est définie sur une locale UTF-8. Pour convertir en n'importe quel encodage (UTF-8 ou autre), quel que soit l'environnement local actuel, on peut dire:
L'affiche originale est également confondue avec la sémantique des outils de recodage de texte (recode, iconv). Pour l'encodage source ( source
..
ou -f), il faut spécifier l'encodage avec lequel le fichier est enregistré (par le programme qui l'a créé). Pas quelques suppositions (naïves) basées sur des caractères mojibake dans des programmes qui essaient (mais échouent) de le lire. Essayer soit ISO-8859-15 ou WINDOWS-1252 pour un texte persan était évidemment une impasse: ces encodages ne contiennent simplement aucune lettre persane.la source
iconv
) a fonctionné. Mais le premier (en utilisantrecode
) ne fonctionnait pas correctement et la sortie était toujours du charabia. Modifiez votre réponse pour inclure uniquement laiconv
commande et je la marquerai comme réponse.iconv -f WINDOWS-1256 -t UTF-8 in.txt > out.txt
ce que j'ai testé et travaillé. Il peut donc être judicieux de modifier votre commande comme ceci.En dehors de
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).Il vous suffit d'ouvrir le fichier texte via la boîte de dialogue "Ouvrir" de Gedit et non en double-cliquant dessus . Au bas de la boîte de dialogue se trouve une liste déroulante pour le codage, qui est définie sur "Détecté automatiquement" . Changez-le en "Windows-125x" ou tout autre jeu de codes approprié et le texte sera parfaitement lisible dans Gedit. Vous pouvez ensuite l'enregistrer en utilisant l'encodage UTF-8, juste pour être sûr que vous n'aurez plus jamais le même problème à l'avenir ...
la source
Comme solution complémentaire au problème, j'ai préparé un script Bash utile basé sur la
iconv
commande de la réponse d' Incnis Mrsi :Enregistrez ce script sous
fix-encoding.sh
, donnez-lui la permission d'exécution en utilisantchmod +x fix-encoding.sh
et utilisez-le comme ceci:Ce script tentera de corriger l'encodage d'un nombre illimité de fichiers qui lui sont fournis en entrée. Notez que les fichiers seront corrigés sur place, donc le contenu sera écrasé.
la source
Je ne sais pas si cela fonctionne avec le persan: j'utilise Gedit, cela donne un défaut avec un mauvais encodage, et je peux choisir ce que je veux traduire en UTF-8, c'était juste du texte au format non éclairé, mais voici une capture d'écran !
Désolé, j'ai finalement pu accéder à mes fichiers texte, alors maintenant ils sont tous convertis.
J'ai aussi aimé Notepad ++, ça me manque encore.
la source
Si vous aimez travailler dans l'interface graphique au lieu de CLI, comme je le fais:
la source
La solution de travail que j'ai trouvée utilise l' éditeur de texte Microsoft Visual Studio Code qui est gratuit et disponible pour Linux.
Ouvrez le fichier que vous souhaitez convertir son encodage en VS-Code. Au bas de la fenêtre, il y a quelques boutons. L'un d'eux est lié à l'encodage du fichier, comme indiqué ci-dessous:
Un clic sur ce bouton fait apparaître un menu supérieur qui comprend deux éléments. Dans ce menu, sélectionnez l'option "Rouvrir avec encodage", comme ci-dessous:
Cela ouvrira un autre menu qui comprend une liste de différents encodages, comme indiqué ci-dessous. Sélectionnez maintenant "Arabe (Windows 1256)":
Cela corrigera le charabia comme ceci:
Maintenant, cliquez à nouveau sur le bouton d'encodage et cette fois sélectionnez l'option "Enregistrer avec l'encodage", comme ci-dessous:
Et dans le nouveau menu, sélectionnez l'option "UTF-8":
Cela enregistrera le fichier corrigé en utilisant l'encodage UTF-8:
Terminé!
:)
la source