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?
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. .
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
}
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.
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 .
iconv -f original_charset -t utf-8 originalfile > newfile
exécutez la commande ci-dessus dans la boucle.
Vous pouvez utiliser EncodingMaster . C'est gratuit, il a une version Windows, Linux et Mac OS X et fonctionne vraiment bien.
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' -- {} \;
Utilisez ce script Python: https://github.com/goerz/convert_encoding.py Il fonctionne sur n’importe quelle plate-forme. Nécessite Python 2.7.
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