2013-10-15 84 views
6

我正在運行以下Powershell腳本以將一系列輸出文件連接成單個CSV文件。 whidataXX.htm(其中xx是一個兩位數的連續編號),創建的文件數因運行而異。爲什麼Powershell文件串聯會將UTF8轉換爲UTF16?

$metadataPath = "\\ServerPath\foo" 

function concatenateMetadata { 
    $cFile = $metadataPath + "whiconcat.csv" 
    Clear-Content $cFile 
    $metadataFiles = gci $metadataPath 
    $iterations = $metadataFiles.Count 
    for ($i=0;$i -le $iterations-1;$i++) { 
     $iFile = "whidata"+$i+".htm" 
     $FileExists = (Test-Path $metadataPath$iFile -PathType Leaf) 
     if (!($FileExists)) 
     { 
      break 
     } 
     elseif ($FileExists) 
     { 
      Write-Host "Adding " $metadataPath$iFile 
      Get-Content $metadataPath$iFile | Out-File $cFile -append 
      Write-Host "to" $cfile 
     } 
    } 
} 

whidataXX.htm文件進行編碼UTF8,但我的輸出文件進行編碼UTF-16。當我在記事本中查看文件時,它看起來是正確的,但是當我在十六進制編輯器中查看文件時,十六進制值00出現在每個字符之間,並且當我將文件拖入Java程序進行處理時,文件將打印到控制檯在c h a r a c t e r s之間有額外的空間。

首先,這對於PowerShell是否正常?或者是否有源文件中會導致這種情況?

其次,我將如何解決上述代碼中的這種編碼問題?

回答

12

Out- * cmdlet(如Out-File)格式化數據,默認格式爲unicode。

您可以添加-Encoding參數輸出文件:

Get-Content $metadataPath$iFile | Out-File $cFile -Encoding UTF8 -append 

或改用添加內容,不重新格式化

Get-Content $metadataPath$iFile | Add-Content $cFile 
+0

並確認,添加內容將簡單地將新數據附加到現有文件,對嗎? – dwwilson66

+0

是的。它的對手Set-Content將覆蓋現有的數據。 – mjolinor