2011-11-14 218 views
3

時當保存一個文本文件,客戶端什麼是默認編碼得到「A」字符每盈貨幣符號的。保存爲文本文件

我嘗試以下,但仍然得到奇怪的字符

using (StreamWriter sr = new StreamWriter(path, false, System.Text.Encoding.UTF8)) 
{ 
    sr.Write(text); 
} 
using (StreamWriter sr = File.CreateText(path)) 
{ 
    sr.Write(text); 
} 

如何保存文件不進行任何編碼有什麼建議?

+3

您不能將文件保存不進行任何編碼,默認編碼取決於本地系統(http://msdn.microsoft.com/en-us/library/system.text.encoding.default.aspx上)。你在談論什麼樣的貨幣符號?只有$或有其他人嗎? –

+0

問題幾乎肯定是客戶端使用了錯誤的編碼。你應該知道他們期待/可以成功處理哪些編碼並使用它。提供[BOM](http://en.wikipedia.org/wiki/Byte_order_mark) – Justin

+0

可能會有所幫助您如何打開此文件?這裏的缺陷似乎比這裏更有可能。如果可能的話,使用任何其他UTF-8應該極力勸阻。唉,TARDISs不存在,或者我們可以梳理出來的一勞永逸;) –

回答

12

如何保存文件不進行任何編碼有什麼建議?

這個問題是沒有意義的; 「編碼」是將字符串轉換爲字節以存儲/傳輸(例如在磁盤上)的過程。任何文本內容必須有編碼。如果你已經保存爲UTF8,然後閱讀它的人也必須讀它 UTF8。您可以嘗試包括BOM:

... new StreamWriter(path, false, new UTF8Encoding(true)) 

另外,找出編碼/代碼頁您的機器配置爲默認使用,並使用(它是Encoding.Default);例如:

... new StreamWriter(path, false, Encoding.Default) 

如果你的用戶表示他們需要在代碼頁874(又名「泰」),那麼你可以使用:

... new StreamWriter(path, false, Encoding.GetEncoding(874)) 
+0

BOM?.......... –

+1

字節順序標記。 http://en.wikipedia.org/wiki/Byte_order_mark –

+0

@MarcGravell。感謝您的回覆。當客戶將它保存到Ansi時,它不會出現問題。 – user9969

3

的StreamWriter與流作爲輸入,將默認爲UTF-8 according to the documentation

此構造函數創建使用UTF-8編碼一個StreamWriter沒有字節順序標記(BOM),因此它的GetPreamble方法返回一個空字節數組。