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
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
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 –
Merci beaucoup Keith. Il fonctionne pleinement maintenant! – fdediego