web-dev-qa-db-fra.com

Le meilleur moyen de convertir des fichiers texte entre les jeux de caractères?

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

Plus précisément, j'ai besoin de convertir UTF-8 en ISO-8859-15 et inversement.

Tout se passe: one-liners dans votre langage de script préféré, des outils de ligne de commande ou d'autres utilitaires pour système d'exploitation, sites Web, etc.

Les meilleures solutions à ce jour:

Sous Linux/UNIX/OS X/cygwin:

  • Gnu iconv suggéré par Troels Arvin est mieux utilisé en tant que 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 alias plus courts:

    $ recode utf8..l9 in.txt
    

    Recode prend également en charge surfaces qui peuvent être utilisées pour convertir entre différents types de fin de ligne et codages:

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

    $ recode ../CR-LF in.txt
    

    Base64 encoder le fichier:

    $ recode ../Base64 in.txt
    

    Vous pouvez aussi les combiner.

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

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

Sous Windows avec Powershell _ ( Jay Bazuzi ): 

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

    (Pas de support ISO-8859-15 cependant; il indique que les jeux de caractères pris en charge sont les suivants: unicode, utf7, utf8, utf32, ascii, bigendianunicode, default et oem.)

Modifier

Voulez-vous dire iso-8859-1? Utiliser "String" fait cela par exemple. pour vice versa

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

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

486
Antti Kissaniemi

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

Vous n'êtes pas obligé de spécifier l'un ou l'autre de ces arguments. Ils utiliseront par défaut les paramètres régionaux actuels, généralement UTF-8.

214
Troels Arvin

Essayez VIM

Si vous avez vim, vous pouvez utiliser ceci:

Non testé pour chaque encodage.

La partie intéressante à ce sujet est que vous n'avez pas à connaître le codage source.

vim +"set nobomb | set fenc=utf8 | x" filename.txt

Attention, cette commande modifie directement le fichier


Partie explication!

  1. +: utilisé par vim pour entrer directement une commande lors de l'ouverture d'un fichier. Habituellement utilisé pour ouvrir un fichier sur une ligne spécifique: vim +14 file.txt
  2. |: Séparateur de plusieurs commandes (comme ; dans bash)
  3. set nobomb: pas de nomenclature utf-8
  4. set fenc=utf8: Définir le nouveau codage sur utf-8 doc link
  5. x: enregistrer et fermer le fichier
  6. filename.txt: chemin d'accès au fichier
  7. ": les notes sont ici à cause des tuyaux. (sinon bash les utilisera comme pipe bash)
79
Boop

Sous Linux, vous pouvez utiliser la très puissante commande recode pour essayer de convertir les différents jeux de caractères ainsi que tout problème de fin de ligne. recode -l vous montrera tous les formats et encodages entre lesquels l'outil peut convertir. La liste sera probablement très longue.

35
Cheekysoft

iconv (1)

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

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

19
Daniel Papasian
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
19
Jay Bazuzi

Essayez la fonction iconv Bash

J'ai mis ceci 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 celui-ci:

utf8 MyClass.Java
14
Arne Evertsson

Essayez Notepad ++

Sous Windows, j’ai pu utiliser Notepad ++ pour convertir les fichiers ISO-8859-1 en UTF-8 . Cliquez sur "Encoding" puis sur "Convert to UTF-8".

13
Jeremy Glover

Oneliner using find, avec détection automatique

Le codage de caractères de tous les fichiers texte correspondants est détecté automatiquement et tous les fichiers texte correspondants sont convertis en codage utf-8:

$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;

Pour effectuer ces étapes, un sous-shell sh est utilisé avec -exec, en exécutant une ligne avec le drapeau -c et en transmettant le nom de fichier comme argument de position "$1" avec -- {}. Entre les deux, le fichier de sortie utf-8 est temporairement nommé converted.

file -bi signifie:

  • -b, --brief
    Ne pas ajouter de noms de fichiers aux lignes de sortie (mode bref).

  • -i, --mime
    Force la commande file à générer des chaînes de type mime plutôt que des chaînes plus classiques lisibles par l'homme. Ainsi, on peut dire «text/plain; charset = us-ascii ’plutôt que« texte ASCII ».

La commande find est très utile pour une telle automatisation de la gestion de fichiers.

Cliquez ici pour plus find à gogo .

9
Serge Stroobandt

PHP iconv ()

iconv("UTF-8", "ISO-8859-15", $input);

3
user15096

DOS/Windows: utilisez Page de code

chcp 65001>NUL
type ascii.txt > unicode.txt

La commande chcp peut être utilisée pour changer la page de code. La page de codes 65001 est le nom Microsoft pour UTF-8. Après avoir défini la page de code, la sortie générée par les commandes suivantes correspond à un ensemble de pages de code.

2
lalthomas

pour écrire le fichier de propriétés (Java) normalement, je l’utilise sous linux (distributions menthe et Ubuntu)

$ native2ascii filename.properties

Par exemple:

$ cat test.properties 
first=Execução número um
second=Execução número dois

$ native2ascii test.properties 
first=Execu\u00e7\u00e3o n\u00famero um
second=Execu\u00e7\u00e3o n\u00famero dois

PS: J'ai écrit l'exécution numéro un/deux en portugais pour forcer les caractères spéciaux.

Dans mon cas, lors de la première exécution, j'ai reçu ce message:

$ native2ascii teste.txt 
The program 'native2ascii' can be found in the following packages:
 * gcj-5-jdk
 * openjdk-8-jdk-headless
 * gcj-4.8-jdk
 * gcj-4.9-jdk
Try: Sudo apt install <selected package>

Lorsque j'ai installé la première option (gcj-5-jdk), le problème était résolu.

J'espère que cela aidera quelqu'un.

1
Maciel Bombonato

Mon outil préféré pour cela est Jedit (un éditeur de texte basé sur Java) qui présente deux caractéristiques très pratiques:

  • Celui qui permet à l’utilisateur de recharger un texte avec un codage différent (et, en tant que tel, de contrôler visuellement le résultat)
  • Une autre qui permet à l’utilisateur de choisir explicitement le codage (et le caractère de fin de ligne) avant de sauvegarder
0
yota

Utilisez ce script Python: https://github.com/goerz/convert_encoding.py Fonctionne sur n’importe quelle plate-forme. Nécessite Python 2.7.

0
kinORnirvana

Avec rubis:

Ruby -e "File.write('output.txt', File.read('input.txt').encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: ''))"

Source: https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences

0
Dorian

Modifiez simplement le codage du fichier chargé dans IntelliJ IDEA IDE, à droite de la barre d'état (en bas), où le jeu de caractères actuel est indiqué. Il vous invite à recharger ou à convertir, utilisez Convert. Assurez-vous d'avoir sauvegardé le fichier original à l'avance.

0