2016-09-23 101 views
-1

我想寫一個字符串到一個文件。字符串附加到文件轉換爲特殊字符

 string lines = "server.1=1.1.1.1:9999\nserver.2=2.2.2.2:8888\n"; 
     File.AppendAllText(directory_path + "zoo.cfg", lines); 

在文件中印刷的字符串是

「敳癲牥ㄮㄽㄮㄮㄮ㤺㤹ਹ敳癲牥㈮㈽㈮㈮㈮㠺㠸ਸ」

。 我試着在File.AppendAllText中編碼ASCII,UTF-8,DEFAULT。但輸出是一樣的。

環境:

的Visual Studio 2015年,Windows Server 2012中,.NET V4.5

請讓我知道蔭做錯了什麼?

+1

你能創建一個可重複的例子嗎?您發佈的代碼無錯誤地工作,並在文件中創建適當的文本。 – stuartd

+1

現有文件的編碼是什麼?你如何閱讀它? – CodeCaster

+0

這不是我問過的。再次閱讀我的評論,並正確回答這兩個問題。 – CodeCaster

回答

0

好吧,現在這很奇怪。上面給出的代碼在我的另一臺機器上完美工作。但由於某種原因,我不知道它不適用於我的新開發環境。 我通過添加Encoding.Unicode參數來解決問題。

File.AppendAllText(windows_directory_path + "zoo.cfg", lines, Encoding.Unicode);

不知道爲什麼Encoding.UTF8/Encoding.ASCII沒有改變格式生成的字符串。

仍然想知道同樣的代碼行爲如何不同。

我不確定這是修復還是解決辦法。

2

追加不會重寫整個文件。所以,你必須使用與現有內容相同的編碼。

一般來說,如果你不知道文本的編碼,你可能不會有那個文本。如果有人給你,「把它寄回來。」當他們發送給你時,必須伴隨着對所用編碼的相互理解。 (順便說一句 - 它不太可能是ASCII碼,而且Encoding.Default在機器之間或用戶之間是無用的。)

給出結果,文件編碼是UTF-16(Encoding.Unicode)是完全有意義的。使用任何其他編碼寫入垃圾代碼。