Cygwin ou GnuWin32 fournissent des outils Unix comme iconv
et dos2unix
(et unix2dos
). Sous Unix/Linux/Cygwin, vous voudrez utiliser "windows-1252" comme encodage au lieu de ANSI (voir ci-dessous). (Sauf si vous savez que votre système utilise une page de code autre que 1252 comme page de code par défaut, auquel cas vous devrez indiquer à iconv la bonne page de codes à partir de laquelle traduire.)
Convertir à partir de un (-f
) à l'autre (-t
) avec :
$ iconv -f windows-1252 -t utf-8 infile > outfile
Ou sous une forme "trouver tout et conquérir" :
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
Sinon :
## 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, alors voici quelques informations supplémentaires sur "ANSI". Dans une réponse à une question connexe, CesarB mentionne :
Il existe plusieurs encodages appelés "ANSI" dans Windows. En fait, ANSI est un terme impropre. iconv n'a aucun moyen de deviner ce que vous voulez.
L'encodage ANSI est l'encodage utilisé par les fonctions "A" dans 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, cela signifie "quelle que soit l'utilisation des fonctions API 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 vers laquelle il renvoie donne cette friandise historique (citée d'un PDF Microsoft) 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 codes Windows 1252 était à l'origine basée sur un brouillon ANSI, qui est devenu la norme ISO 8859-1. Cependant, 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 suivantes basées à l'origine sur la série ISO 8859-x ont dévié de l'ISO. À ce jour, il n'est pas rare que la communauté de développement, à la fois à l'intérieur et à l'extérieur de Microsoft, confonde la page de code 8859-1 avec Windows 1252, ainsi que voir "ANSI" ou "A" utilisé pour signifier la prise en charge de la page de code Windows .
Avec PowerShell, vous pouvez faire quelque chose comme ceci :
Get-Content IN.txt | Out-File -encoding ENC -filepath OUT.txt
Alors que ENC est quelque chose comme unicode , ascii , utf8 , et utf32 . Consultez 'help out-file'.
Pour convertir tous les fichiers *.txt d'un répertoire en UTF-8, 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.
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 Wikipédia sur les nouvelles lignes comporte une section sur les utilitaires de conversion.
Cela semble être votre meilleur pari pour une conversion en utilisant uniquement les outils fournis par Windows :
TYPE unix_file | FIND "" /V > dos_file