encoding - texto - Iconv está convirtiendo a UTF-16 en lugar de UTF-8 cuando se invoca desde powershell
encoding unix (1)
Tengo un problema al tratar de convertir por lotes la codificación de algunos archivos de ISO-8859-1 a UTF-8 utilizando iconv en un script de powershell.
Tengo este archivo bat, que funciona 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
)
Necesito convertir todos los archivos en la estructura de directorios, así que programé este otro script, esta vez usando 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
}
Y al utilizar esto, el resultado es que los archivos se convierten a UTF-16. No tengo ni idea de lo que estoy haciendo mal.
¿Podría alguien ayudarme con esto? ¿Podría ser algún tipo de problema con la codificación de Powershell en sí?
Estoy usando W7 y WXP y LibIconv 1.9.2
>
esencialmente está usando el cmdlet Out-File cuya codificación predeterminada es Unicode. Tratar:
iconv.exe ... | Out-File -Encoding Utf8
o con params:
& "C:/Program Files/GnuWin32/bin/iconv.exe" -f iso-8859-1 -t utf-8 $inFileName |
Out-File -Encoding Utf8 $outFileName
Y dado que iconv.exe está saliendo en UTF8, debe decirle al subsistema de consola .NET cómo interpretar la secuencia stdin de esa manera (ejecute esto antes de iconv.exe):
[Console]::OutputEncoding = [Text.Encoding]::UTF8