57 votes

Conversion par lots de l'encodage dans les fichiers

Comment puis-je convertir par lot les fichiers d'un répertoire pour leur encodage (par exemple ANSI UTF-8) avec une commande ou un outil ?

Pour les fichiers uniques, un éditeur est utile, mais comment faire le travail pour les fichiers de masse ?

43voto

user12786 Points 454

Cygwin o GnuWin32 fournir des outils Unix comme iconv y dos2unix (et unix2dos ). Sous Unix/Linux/Cygwin, vous voudrez utiliser "Windows-1252" comme codage au lieu de ANSI (voir ci-dessous). (A moins que vous ne sachiez que votre système utilise une autre page de code que 1252 comme page de code par défaut, auquel cas vous devrez dire à icônev la bonne page de code à partir de laquelle traduire).

Convertir d'un ( -f ) à l'autre ( -t ) avec :

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

Ou dans une forme de recherche et de conquête :

## 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 ayant été posée de nombreuses fois sur ce site, voici quelques informations supplémentaires sur "ANSI". Dans une réponse à une question connexe, CesarB mentionne :

Il existe plusieurs codages qui sont appelés "ANSI" dans Windows. En effet, L'ANSI est une erreur d'appellation . iconv n'a aucun moyen de deviner ce que vous voulez.

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

La page à laquelle il renvoie donne cette anecdote historique (citée dans le document suivant un PDF de Microsoft ) sur les origines du CP 1252 et de l'ISO-8859-1, un autre codage très utilisé :

[...] Cela vient du fait que la page de code 1252 de Windows était à l'origine basée sur un projet ANSI, qui est devenu la norme ISO 8859-1. Toutefois, en ajoutant des 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 ultérieures basées à l'origine sur la série ISO 8859-x se sont écartées de la norme ISO. À ce jour, il n'est pas rare que la communauté des développeurs, tant à l'intérieur qu'à l'extérieur de Microsoft, confonde la page de codes 8859-1 avec Windows 1252, et que les termes "ANSI" ou "A" soient utilisés pour signifier la prise en charge de la page de codes Windows.

38voto

akira Points 58339

Avec PowerShell vous pouvez faire quelque chose comme ça :

Get-Content IN.txt | Out-File -encoding ENC -filepath OUT.txt

Alors que ENC est quelque chose comme unicode , ascii , utf8 y utf32 . Vérifiez le fichier d'aide.

Pour convertir tous les fichiers *.txt d'un répertoire en UTF-8, faites quelque chose comme ceci :

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.

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
}

6voto

Serge Stroobandt Points 1700

Oneliner utilisant find, avec détection automatique

Le codage des caractères de tous les fichiers texte correspondants est détecté automatiquement et tous les fichiers texte correspondants sont convertis en encodage 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 l'exécution d'un one-liner avec l'option -c et en passant le nom du fichier comme argument positionnel. "$1" con -- {} . Entre-temps, le fichier de sortie UTF-8 est temporairement nommé converted .

En find est très utile pour une telle automatisation de la gestion des fichiers.

Cliquez ici pour mehr find à profusion .

5voto

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

Cela semble être votre meilleure chance pour une conversion utilisant uniquement les outils fournis par Windows :

TYPE unix_file | FIND "" /V > dos_file

3voto

Tiler Points 31

UTFCast est un convertisseur Unicode pour Windows qui supporte le mode batch. J'utilise la version payante et je suis assez à l'aise avec elle.

UTFCast est un convertisseur Unicode qui vous permet de convertir par lots tous les fichiers texte en encodages UTF en un seul clic de souris. Vous pouvez l'utiliser pour convertir un répertoire plein de fichiers texte en encodages UTF incluant UTF-8, UTF-16 et UTF-32 dans un répertoire de sortie, tout en conservant la structure de répertoire des fichiers originaux. Il n'est même pas important que votre fichier texte ait une extension différente, UTFCast peut détecter automatiquement les fichiers texte et les convertir.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X