从powershell调用时,Iconv正在转换为UTF-16而不是UTF-8

时间:2010-08-30 22:37:07

标签: encoding powershell iconv utf

尝试使用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

1 个答案:

答案 0 :(得分:5)

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

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

或与params:

& "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