2012-11-28 18 views
0

我使用這個功能從文件中讀取文本行:不規則的字符/文本編碼問題具有回寫到文件

string[] postFileLines = System.IO.File.ReadAllLines(pstPathTextBox.Text);

在插入點策略了一些額外的線條,然後寫作文回到一個文件:

TextWriter textW = new StreamWriter(filePath); 
for (int i = 0; i < linesToWrite.Count; i++) 
{ 
    textW.WriteLine(linesToWrite[i]); 
} 

textW.Close(); 

這工作得很好,直到我閱讀的文本文件包含國際或特殊字符。當回寫文件時,我不會得到相同的字符 - 它是一個盒子。

例:

之前= W:\Contrat à faire aujourd輝\`

後= W:\Contrat � faire aujourd輝\`

該網頁被描繪它作爲一個問號,但在文本文件,它是一個矩形白盒。

有沒有辦法在我的應用程序中包含正確的編碼以便能夠處理這些字符?或者,如果沒有,請發出警告,說它無法正確寫入給定的行?

+0

http://msdn.microsoft.com/en-us/library/bsy4fhsa.aspx – spender

+0

http://stackoverflow.com/questions/4520184/how-to-detect-the-character-encoding-of -a文本文件? – spender

+0

繼續@ spender的評論http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx – nonsensickle

回答

2

添加encondig這樣的:

File.ReadAllLines(path, Encoding.UTF8); 

new StreamWriter(filePath, Encoding.UTF8); 

希望它能幫助。

+0

感謝您的建議,我試了這個,結果相同。我嘗試了一些其他的UTF編碼,但是這使得整個文件亂碼文本。我將不得不調查評論,並找出如何確定編碼或什麼 – ikathegreat

+0

UTF-8是正確的決定。更改指定UTF-8的代碼,擦除您的實際文件,運行應用程序以生成全新文件,使用Notepad ++或其他優秀編輯器打開新文件(notepad不是一種選擇,因爲它無法讀取UTF-8巫婆這樣奇怪的符號)。儘管如此,如果你喜歡在windows中使用記事本,那麼改變Encoding.UTF8爲Encoding.GetEncoding(28591)(這相當於iso-8859-1) – jalcalav

0

利用這一點,對我的作品

string txt = System.IO.File.ReadAllText(inpPath, Encoding.GetEncoding("iso-8859-1")); 
0

您可以嘗試UTF編碼,同時寫入文件以及,

textW.WriteLine(linesToWrite[i],Encoding.UTF8); 
0

您可能需要編寫Single-byte Character Sets

使用Encoding.GetEncodings()您可以輕鬆獲得所有可能的編碼。 ( 「DOS」 的編碼是System.Text.SBCSCodePageEncoding

enter image description here

在你的情況,你可能需要使用

File.ReadAllLines(path, Encoding.GetEncoding("IBM850")); 

new StreamWriter(filePath, Encoding.GetEncoding("IBM850")); 

博訥JOURNEE! ;)