web-dev-qa-db-fra.com

Fichiers de conversion par lots pour l'encodage

Comment puis-je convertir par lots des fichiers d'un répertoire pour leur codage (par exemple ANSI-> UTF-8) à l'aide d'une commande ou d'un outil?

Pour les fichiers uniques, un éditeur aide, mais comment faire le travail de fichiers en masse?

46
desolat

Cygwin ou GnuWin32 fournit des outils Unix tels que iconv et dos2unix (et unix2dos) . Sous Unix/Linux/Cygwin, vous voudrez utiliser "windows-1252" comme codage au lieu de ANSI (voir ci-dessous). (À moins que vous ne sachiez que votre système utilise une page de codes autre que 1252 comme page de codes par défaut, auquel cas vous devrez indiquer iconv la bonne page de codes pour la traduction.)

Convertir un (-f) en un autre (-t) avec:

$ iconv -f windows-1252 -t utf-8 infile > outfile

Ou sous une forme de tout-trouver-conquérir:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;

Alternativement:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;

Cette question a été posée à plusieurs reprises sur ce site. Voici donc quelques informations supplémentaires sur "ANSI". Dans une réponse à une question connexe, CesarB mentionne :

Il existe plusieurs codages appelés "ANSI" dans Windows. En fait, ANSI est un abus de langage . iconv n'a aucun moyen de deviner ce que vous voulez.

Le codage ANSI est le codage utilisé par les fonctions "A" de l'API Windows (les fonctions "W" utilisent UTF-16). Le codage auquel il correspond dépend généralement de la langue de votre système Windows. Le plus courant est le CP 1252 (également appelé Windows-1252). Ainsi, lorsque votre éditeur dit ANSI, cela signifie "quelles que soient les fonctions de l'API utilisées comme codage ANSI par défaut", qui est le codage non Unicode par défaut utilisé dans votre système (et donc généralement celui utilisé pour les fichiers texte).

La page à laquelle il renvoie renvoie à cette info-bulle historique (citée dans un fichier Microsoft PDF ) sur les origines du CP 1252 et de l'ISO-8859-1, autre exemple fréquemment cité. encodage utilisé:

[...] Cela vient du fait que la page de code Windows 1252 était à l'origine basée sur un brouillon ANSI, qui est devenue la norme ISO 8859-1. Toutefois, lors de l'ajout de points de code à la plage réservée aux codes de contrôle dans la norme ISO, la page de codes Windows 1252 et les pages de codes Windows suivantes, basées à l'origine sur la série ISO 8859-x, s'écartaient de l'ISO. À ce jour, il n'est pas rare que la communauté de développement, à l'intérieur et à l'extérieur de Microsoft, confonde la page de codes 8859-1 avec Windows 1252, ainsi que la mention "ANSI" ou "A" utilisée pour indiquer le support des pages de codes Windows. .

36
quack quixote

avec PowerShell vous pouvez faire quelque chose comme ceci:

%  get-content IN.txt | out-file -encoding ENC -filepath OUT.txt

tandis que ENC est quelque chose comme unicode, ascii, utf8, utf32. checkout 'aide out-file'.

pour convertir tous les fichiers * .txt d'un répertoire en utf8, procédez comme suit:

% foreach($i in ls -name DIR/*.txt) { \
       get-content DIR/$i | \
       out-file -encoding utf8 -filepath DIR2/$i \
  }

qui crée une version convertie de chaque fichier .txt dans DIR2.

EDIT: Pour remplacer les fichiers dans tous les sous-répertoires, utilisez:

% foreach($i in ls -recurse -filter "*.Java") {
    $temp = get-content $i.fullname
    out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
28
akira

La page Wikipedia sur les nouvelles lignes comporte une section sur les utilitaires de conversion .

Cela semble être votre meilleur choix pour une conversion utilisant uniquement les outils livrés avec Windows:

TYPE unix_file | FIND "" /V > dos_file
6
nagul

UTFCast est un convertisseur Unicode pour Windows qui prend en charge le mode de traitement par lots. J'utilise la version payante et je suis assez à l'aise avec cela.

UTFCast est un convertisseur Unicode qui vous permet de convertir par lots tous les fichiers texte en encodages UTF d’un simple clic de souris. Vous pouvez l'utiliser pour convertir un répertoire contenant des fichiers texte en codages UTF, y compris UTF-8, UTF-16 et UTF-32, en un répertoire de sortie, tout en conservant la structure de répertoires des fichiers d'origine. Peu importe que votre fichier texte ait une extension différente, UTFCast peut automatiquement détecter les fichiers texte et les convertir.

3
Tiler

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 au format 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 en tant qu'argument de position "$1" avec -- {}. Entre les deux, le fichier de sortie utf-8 est temporairement nommé converted.

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

Cliquez ici pour plus find à gogo .

2
Serge Stroobandt

iconv -f original_charset -t utf-8 originalfile > newfile

exécutez la commande ci-dessus dans la boucle.

1
Aneesh Garg

Vous pouvez utiliser EncodingMaster . C'est gratuit, il a une version Windows, Linux et Mac OS X et fonctionne vraiment bien.

0
Francisco Vera

Dans mon cas d'utilisation, j'avais besoin de la détection automatique du codage d'entrée et il y avait beaucoup de fichiers avec le codage Windows-1250, pour lequel la commande file -bi <FILE> renvoie charset=unknown-8bit. Ce paramètre n'est pas valide pour iconv.

J'ai eu les meilleurs résultats avec enca .

Convertit tous les fichiers avec l'extension txt en utf-8

find . -type f -iname *.txt -exec sh -c 'echo "$1" && enca "$1" -x utf-8' -- {} \;
0
Bedla

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

0
kinORnirvana

Il y a dos2unix sur unix.
Il existait un autre outil similaire pour Windows ( , une autre référence ici ).

Comment convertir des fichiers texte Unix et Windows? présente quelques astuces supplémentaires

0
nik