581 votes

Meilleur moyen de convertir des fichiers texte entre des jeux de caractères ?

Quel est l'outil ou la méthode la plus rapide et la plus simple pour convertir des fichiers texte entre des jeux de caractères ?

Plus précisément, je dois convertir l'UTF-8 en ISO-8859-15 et vice versa.

Tout est permis : des expressions en une ligne dans votre langage de script préféré, des outils en ligne de commande ou d'autres utilitaires pour les systèmes d'exploitation, des sites web, etc.

Les meilleures solutions jusqu'à présent :

Sous Linux/UNIX/OS X/cygwin :

  • Gnu icônev suggéré par Troels Arvin est mieux utilisé comme filtre . Il semble être universellement disponible. Exemple :

    $ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt

    Comme l'a souligné Ben il existe un convertisseur en ligne utilisant iconv .

  • Gnu recode ( manuel ) suggéré par Cheekysoft convertira un ou plusieurs fichiers sur place . Exemple :

    $ recode UTF8..ISO-8859-15 in.txt

    Celui-ci utilise des pseudonymes plus courts :

    $ recode utf8..l9 in.txt

    Recode prend également en charge surfaces qui peut être utilisé pour convertir entre différents types de fin de ligne et d'encodage :

    Convertit les nouvelles lignes de LF (Unix) en CR-LF (DOS) :

    $ recode ../CR-LF in.txt

    Fichier codé en base64 :

    $ recode ../Base64 in.txt

    Vous pouvez également les combiner.

    Convertissez un fichier UTF8 encodé en Base64 avec des fins de lignes Unix en un fichier Latin 1 encodé en Base64 avec des fins de lignes Dos :

    $ recode utf8/Base64..l1/CR-LF/Base64 file.txt

Sur Windows avec Powershell ( Jay Bazuzi ) :

  • PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt

    (Pas de support de l'ISO-8859-15 cependant ; il est dit que les jeux de caractères supportés sont unicode, utf7, utf8, utf32, ascii, bigendianunicode, default, et oem).

Editar

Voulez-vous dire le support iso-8859-1 ? L'utilisation de "String" permet de le faire, par exemple pour l'inverse.

gc -en string in.txt | Out-File -en utf8 out.txt

Remarque : Les valeurs d'énumération possibles sont "Inconnu, Chaîne, Unicode, Octet, BigEndianUnicode, UTF8, UTF7, Ascii".

0 votes

J'ai essayé gc -en Ascii readme.html | Out-File -en UTF8 readme.html mais il convertit le fichier en utf-8 mais ensuite il est vide ! Notepad++ dit que le fichier est au format Ansi, mais si je comprends bien, ce n'est même pas un jeu de caractères valide ? fr.answers.yahoo.com/question/index?qid=20100927014115AAiRExF

2 votes

Je suis tombé sur ce site en cherchant une réponse à une question connexe - excellent résumé ! J'ai pensé qu'il valait la peine d'ajouter que recode agira également comme un filtre si vous ne lui passez aucun nom de fichier, par exemple : recode utf8..l9 < in.txt > out.txt

0 votes

iconv.com/iconv.htm semble être mort pour moi ? (timeout)

277voto

Troels Arvin Points 2454

Utilitaire autonome approche

iconv -f ISO-8859-1 -t UTF-8 in.txt > out.txt

-f ENCODING  the encoding of the input
-t ENCODING  the encoding of the output

Il n'est pas nécessaire de préciser l'un ou l'autre de ces arguments. Ils seront utilisés par défaut dans votre locale actuelle, qui est généralement UTF-8.

4 votes

Pour tous ceux qui sont gênés par l'indisponibilité des versions non-dash, il semble que les versions OSX (et probablement toutes les versions BSD) d'iconv ne supportent pas les alias non-dash pour les différents encodages UTF-*. iconv -l | grep UTF vous indiquera tous les encodages liés à l'UTF que votre copie d'iconv supporte.

18 votes

Vous ne connaissez pas l'encodage de votre fichier d'entrée ? Utilisez chardet in.txt pour générer une meilleure estimation. Le résultat peut être utilisé comme ENCODAGE dans iconv -f ENCODING .

4 votes

Empêcher la sortie sur des caractères non valides (éviter illegal input sequence at position ), et remplacer les caractères "bizarres" par des caractères "similaires" : iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT in.txt > out.txt .

40voto

Cheekysoft Points 16532

Sous Linux, vous pouvez utiliser le très puissant recode pour essayer de convertir les différents jeux de caractères ainsi que les problèmes de fin de ligne. recode -l vous montrera tous les formats et encodages entre lesquels l'outil peut effectuer des conversions. Il est probable que la liste soit TRÈS longue.

0 votes

Comment convertir en LF ? Il y a /CR y /CR-LF mais non /LF

24voto

Jay Bazuzi Points 20462
Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT

La version la plus courte, si vous pouvez supposer que la nomenclature d'entrée est correcte :

gc FILE.TXT | Out-File -en utf7 file-utf7.txt

1 votes

Voici une version plus courte qui fonctionne mieux. gc .\file-utf8.txt | sc -en utf7 .\file-utf7.txt

0 votes

@LarryBattle : Comment Set-Content fonctionnent mieux que Out-File ?

0 votes

...oh. Je suppose que c'est presque la même chose. J'ai eu du mal à faire fonctionner votre exemple parce que je supposais que les deux versions utilisaient le même logiciel. file-utf8.txt en entrée puisqu'ils avaient tous deux le même fichier de sortie en tant que file-utf7.txt .

24voto

Daniel Papasian Points 10206

iconv(1)

iconv -f FROM-ENCODING -t TO-ENCODING file.txt

Il existe également des outils basés sur iconv dans de nombreuses langues.

1 votes

Qu'en est-il de la détection automatique de l'encodage original ?

18voto

Arne Evertsson Points 11286

Essayez la fonction Bash iconv

J'ai mis cela dans .bashrc :

utf8()
{
    iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp
    rm $1
    mv $1.tmp $1
}

..pour pouvoir convertir des fichiers comme ceci :

utf8 MyClass.java

10 votes

Il est préférable d'utiliser tmp=$(mktmp) pour créer un fichier temporaire. De plus, la ligne avec rm est redondante.

1 votes

Pouvez-vous compléter cette fonction avec la détection automatique du format d'entrée ?

3 votes

Attention, cette fonction supprime le fichier d'entrée sans vérifier que l'appel à iconv a réussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X