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 以及 LibIconv 1.9.2

4

1 回答 1

5

>本质上是使用默认编码为 Unicode 的 Out-File cmdlet。尝试:

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 控制台子系统如何像这样解释标准输入流(在 iconv.exe 之前执行此操作):

[Console]::OutputEncoding = [Text.Encoding]::UTF8 
于 2010-08-30T22:51:13.780 回答