2012-06-06 46 views
0

我節省了使用控制字符出現在XDocument.Save()中,但僅對Unix可見?

xDoc.Save(result.Filename, SaveOptions.OmitDuplicateNamespaces);

當我們正確打開Windows系統(Server2008中或Win7的)的XML是正確的,過程中的下一個系統上的文件並進行處理簡單的XDocument。

Howevever,當我們移動到我們的生產系統(unix)時,xml無法正確讀取。

當我們vi在unix框上產生的文件有三個主要的控制字符。正確刪除這些和xml進程。

我在Notepad ++(顯示文件顯示爲ANSI/UTF8)中看不到這些字符。

有沒有人知道這些角色是什麼,他們是如何到達那裏的......以及如何刪除它們或阻止它們出現?

回答

2

您可以省略Unicode BOM,只需將new UTF8Encoding(false)傳遞給保存方法即可。

像這樣的東西(請把它當作僞代碼):

using(var writer = new StreamWriter(result.Filename, false, new UTF8Encoding(false))){ 
    xDoc.Save(writer , SaveOptions.OmitDuplicateNamespaces); 
} 
+1

此假設讀者可以處理UTF8,但不是BOM。 –

+0

沒問題。這個答案是「正確刪除這些和xml進程」。從我有限的經驗來看,這將工作得很好。 –

+0

@HenkHolterman這正是問題所在 - UTF8中的BOM混淆了最終系統http://en.wikipedia.org/wiki/Byte_order_mark – BlueChippy

1

這是Unicode BOM(字節順序標記)。

如果它在Linux中顯示,請獲取支持Unicode的編輯器/查看器。

相關問題