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 individuels, un éditeur aide, mais comment faire le travail de fichiers en masse?
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 individuels, un éditeur aide, mais comment faire le travail de fichiers en masse?
Réponses:
Cygwin ou GnuWin32 fournissent 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 page de codes appropriée pour la traduction.)
Convertir de l'un ( -f
) à l'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 terme impropre . 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 information historique (tirée d' un fichier Microsoft PDF ) sur les origines du CP 1252 et de l'ISO-8859-1, un autre encodage souvent 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. .
iconv
semble tronquer les fichiers à 32 768 octets s’ils dépassent cette taille. Comme il écrit dans le fichier qu'il tente de lire, il parvient à faire le travail si le fichier est suffisamment petit, sinon il tronque le fichier sans avertissement ...
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
}
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
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 codages 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. Même si votre fichier texte a une extension différente, UTFCast peut automatiquement détecter les fichiers texte et les convertir.
Le codage des caractères de tous les fichiers texte correspondants est détecté automatiquement et tous les fichiers texte correspondants sont convertis en utf-8
codage:
$ 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, une coque sous sh
est utilisé avec -exec
, l' exécution d' une seule ligne avec le -c
drapeau, et en passant le nom de fichier de l'argument de position "$1"
avec -- {}
. Entre les deux, le utf-8
fichier de sortie est nommé temporairement converted
.
Cette find
commande 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.
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 y avait un autre outil similaire pour Windows ( une autre référence ici ).
Comment convertir des fichiers texte Unix et Windows? a encore quelques astuces
dos2unix
est utile pour convertir les sauts de ligne , mais l'OP cherche à convertir les encodages de caractères.
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 Windows-1250
codage, pour lesquels la commande est file -bi <FILE>
retournée charset=unknown-8bit
. Ce paramètre n'est pas valide pour iconv
.
J'ai eu les meilleurs résultats avec Enca .
Convertir 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' -- {} \;