2010-08-30 6 views
3

J'ai un problème en essayant de convertir par lots le codage de certains fichiers de ISO-8859-1 en UTF-8 en utilisant iconv dans un script powershell.Iconv convertit en UTF-16 au lieu de UTF-8 lorsqu'il est appelé depuis powershell

Je possède ce fichier de chauve-souris, qui fonctionne bien:

for %%f in (*.txt) do (
    echo %%f 
    C:\"Program Files"\GnuWin32\bin\iconv.exe -f iso-8859-1 -t utf-8 %%f > %%f.UTF_8_MSDOS 
) 

je dois convertir tous les fichiers sur la structure des répertoires, donc je programmé cet autre scénario, cette fois en utilisant Powershell:

Get-ChildItem -Recurse -Include *.java | 
    ForEach-Object { 
    $inFileName = $_.DirectoryName + '\' + $_.name 
    $outFileName = $inFileName + "_UTF_8" 
    Write-Host Convirtiendo $inFileName -> $outFileName 
    C:\"Program Files"\GnuWin32\bin\iconv.exe -f iso-8859-1 -t utf-8 $inFileName > $outFileName 
    } 

Et en utilisant cela le résultat est les fichiers à convertir en UTF-16. Je n'ai aucune idée de ce que je fais mal.

Quelqu'un peut-il m'aider avec ceci? Pourrait-il être une sorte de problème avec l'encodage de powershell lui-même?

J'utilise W7 et WXP et libiconv 1.9.2

Répondre

5

> essentiellement utilise l'applet de commande Out-File qui est l'encodage par défaut est Unicode. Essayez:

iconv.exe ... | Out-File -Encoding Utf8 

ou params:

& "C:\Program Files\GnuWin32\bin\iconv.exe" -f iso-8859-1 -t utf-8 $inFileName | 
    Out-File -Encoding Utf8 $outFileName 

Et depuis iconv.exe est la sortie en UTF8, vous devez indiquer le sous-système de console .NET comment intrepret le flux stdin comme si (exécuter cette avant iconv.exe):

[Console]::OutputEncoding = [Text.Encoding]::UTF8 
+0

Nous vous remercions de votre réponse Keith. Je viens d'essayer. Maintenant le fichier de sortie est codé en UTF-8, mais certains caractères sont cassés (ñ et á, par exemple). Dans la sortie iconv ils sont OK (au moins je vois qu'ils sont bons quand j'utilise ma version BAT). Une idée à ce sujet? – fdediego

+1

Vous devez indiquer à PowerShell l'encodage utilisé par iconv.exe. Définissez l'encodage de sortie de la console afin que PowerShell sache comment interpréter les octets qui sortent de iconv.exe - '[Console] :: OutputEncoding = [Text.Encoding] :: UTF8' - comme discuté ici http://keithhill.spaces.live .com/blog/cns! 5A8D2641E0963A97! 7212.entry –

+0

Merci beaucoup Keith. Il fonctionne pleinement maintenant! – fdediego

Questions connexes