2011-09-28 60 views
4

我有一個用於文件字符編碼對話的PowerShell腳本。PowerShellscript,錯誤的文件編碼對話

Get-ChildItem -Path D:/test/data -Recurse -Include *.txt | 
ForEach-Object { 
    $inFileName = $_.DirectoryName + '\' + $_.name 
    $outFileName = $inFileName + "_utf_8.txt" 
    Write-Host "windows-1251 to utf-8: " $inFileName -> $outFileName 
    E:\bin\iconv\iconv.exe -f cp1251 -t utf-8 $inFileName > $outFileName 
} 

但是,而不是UTF-8它文件的字符編碼轉換爲UTF-16。當我從命令行調用iconv實用程序時,它工作正常。

我該怎麼做?

回答

6

將輸出重定向到文件時,Powershell將Unicode用作默認編碼。您可以使用-Encoding UTF8開關管道到Out-File而不是使用重定向操作員。

E:\bin\iconv\iconv.exe -f cp1251 -t utf-8 $inFileName | Out-File -FilePath $outFileName -Encoding UTF8 

以下TechNet製品具有更多的信息(相當於Get-Help Out-File -full在Powershell的V2)。

在情況下,它可以幫助您的方案的話,那值得注意的是,你可以使用PowerShell做編碼轉換也。

Get-Content $inFileName -Encoding ASCII | 
Out-File -FilePath $outFileName -Encoding UTF8 
+0

您確定Get-Content cmdlet與-Encoding有關嗎? –

+0

@ Gustav.Calder - 是的,有 – manojlds

+2

@ Gustav.Calder有,但它沒有出現在'Get-Content'的幫助中,因爲它是由FileSystem提供者提供的一個動態參數。您可以在'Get-Help FileSystem'中找到更多信息。 – ajk