Iconv конвертируется в UTF-16 вместо UTF-8 при вызове из powershell - PullRequest
4 голосов
/ 31 августа 2010

У меня проблема при попытке пакетного преобразования кодировки некоторых файлов из ISO-8859-1 в UTF-8 с использованием iconv в сценарии powershell.

У меня есть этот bat-файл, который работает нормально:

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 
)

Мне нужно преобразовать все файлы в структуре каталогов, поэтому я запрограммировал этот другой сценарий, на этот раз с помощью 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
  }

И с помощью этого получаются файлыпреобразован в UTF-16.Я понятия не имею, что я делаю неправильно.

Может ли кто-нибудь помочь мне с этим?Может быть, это какая-то проблема с кодировкой самого powershell?

Я использую W7 и WXP и LibIconv 1.9.2

1 Ответ

5 голосов
/ 31 августа 2010

> по сути использует командлет Out-File, кодировка по умолчанию которого - Unicode.Попробуйте:

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

или с параметрами:

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

И так как iconv.exe выводится в UTF8, вы должны сообщить консольной подсистеме .NET, как интерпретировать поток stdin, например:так (выполните это до iconv.exe):

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