2010-08-30 45 views
3

我嘗試使用powershell腳本中的iconv將ISO-8859-1中的某些文件的編碼批量轉換爲UTF-8時出現問題。當從powershell調用時,Iconv正在轉換爲UTF-16而不是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

回答

5

>基本使用,輸出文件cmdlet的誰的默認編碼爲Unicode。嘗試:

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控制檯子系統如何intrepret標準輸入流,像這樣(執行此在iconv.exe之前):

[Console]::OutputEncoding = [Text.Encoding]::UTF8 
+0

謝謝您的迴應Keith。 我剛試過。現在輸出文件是UTF-8編碼的,但有些字符被破壞(例如,á和á)。在iconv輸出中他們沒問題(至少我看到他們在使用我的BAT版本時很好)。有關它的任何想法? – fdediego 2010-08-31 20:27:48

+1

你需要告訴PowerShell iconv.exe正在使用什麼編碼。設置控制檯輸出編碼,以便PowerShell知道如何解釋iconv.exe輸出的字節 - [[Console] :: OutputEncoding = [Text.Encoding] :: UTF8] - 如此處所述http://keithhill.spaces.live .com/blog/cns!5A8D2641E0963A97!7212.entry – 2010-08-31 21:00:50

+0

非常感謝Keith。它現在正在充分運作! – fdediego 2010-08-31 21:25:41

相關問題