4

PowerShellスクリプトでiconvを使用して、一部のファイルのエンコーディングをISO-8859-1からUTF-8にバッチ変換しようとしているときに問題が発生しました。

私はこの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およびLibIconv1.9.2を使用しています

4

1 に答える 1

5

>基本的に、デフォルトのエンコーディングがUnicodeであるOut-Fileコマンドレットを使用しています。試す:

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 
于 2010-08-30T22:51:13.780 に答える