2015-05-15 31 views
2

我有一個XML配置文件,我正在使用PowerShell進行修改,當我使用Xml.Save保存文件時,它會更改編碼類型。如何使用Xml.Save強制或指定編碼類型?

當我打開原始文件時,我試圖在Notepad ++中進行編輯,編碼類型被列爲「無BOM的UTF-8」。當我用Notepad ++打開文件後,使用Xml進行編輯。編碼類型簡單地列爲「UTF-8」。這會導致使用此文件的程序錯誤地指出它無法解析配置屬性。

如果我在Notepad ++中打開EDITED文件,將編碼類型更改爲「沒有BOM的UTF-8」,並保存該文件。該程序然後將運行沒有錯誤。

如何在保存文件時強制和/或指定Xml.Save使用「沒有BOM的UTF-8」編碼類型?

我已經嘗試了不同的鑄造和保存文件的方式,但Xml.Save似乎默認爲「UTF-8」導入類型。

$xml = New-Object -TypeName XML 
$xml.Load($file) 
$xml.configuration.config.option = $newValue 
$xml.Save($file) 

回答

5

這似乎是照顧它。當然有可能是更優雅的方式......從hereherehere收集

$xml = New-Object -TypeName XML 
$xml.Load($file) 
$xml.configuration.config.option = $newValue 

$utf8WithoutBom = New-Object System.Text.UTF8Encoding($false) 
$sw = New-Object System.IO.StreamWriter($file, $false, $utf8WithoutBom) 

$xml.Save($sw) 
$sw.Close() 

詳細信息。

+0

有趣!我發現了一個基本上使用相同方法的類似解決方案。它可以工作,但有趣的部分是在我保存文件並在Notepad ++中打開它後,它將文件列爲具有「ANSI」編碼。就像你說的我希望有更優雅的東西,但這確實有用,所以謝謝你! –

+0

@ user1770228當我回答你的[原始問題](http://stackoverflow.com/q/30263775/1630171)時,我想出了相同的解決方案。我在Notepad ++的測試中打開了輸出文件,並顯示「UTF-8 without BOM」作爲編碼。 –

相關問題