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