2011-09-04 45 views
2

我有一個問題。這段代碼可以打開英文文本的txt文件,但是當我嘗試打開西里爾文本的txt文件時...西里爾文的符號是「正方形」。有沒有可能解決這個問題?如何正確打開RichTextBox中的UTF-8文件?

 string fileData = openFileDialog1.FileName; 
     StreamReader sr = new StreamReader(fileData); 
     richTextBox.Text = sr.ReadToEnd(); 
     sr.Close(); 

     SavedFile = saveFileDialog1.FileName; 
     dataTextBox.SaveFile(SavedFile, RichTextBoxStreamType.PlainText); 

解決方案:

 string fileData = openFileDialog1.FileName; 
     StreamReader sr = new StreamReader(fileData, Encoding.Default); 
     richTextBox.Text = sr.ReadToEnd(); 
     sr.Close(); 
+0

你對!我的文檔的編碼是ANSI。但是,爲什麼Windows記事本可以看到符號,但RichTextBox - 不是? – user922907

+0

記事本檢測到啓發式編碼,它並不總是假定所有文件都是UTF8 –

回答

2

,你肯定該文件是UTF8,對不對?如果您編寫字符串str = sr.ReadToEnd();,請在下一行放置一個斷點並在Visual Studio中觀看str,您會看到西裏爾字母文本正確嗎?嘗試在記事本中打開文件,文件 - >另存爲,然後選擇UTF8作爲編碼。

記事本能夠「讀取」文件的原因是它使用用戶代碼頁,在你的情況下它可能是Windows-1251(西里爾)代碼頁。 StreamReader嘗試將文件讀取爲UTF8。如果你想要,你可以強制StreamReader使用不同的代碼頁。第二個參數是您要使用的Encoding。您通過Encoding.GetEncoding(1251)西里爾文。可悲的是,你必須知道Encoding「先驗」(=之前)閱讀文件。

+0

文本是ANSI。當我將它轉換成記事本中的UTF8時,它開始正常打開。 – user922907

+0

記事本不顯示代碼頁。對於ANSI,他的意思是「本地一個字節一個符號代碼頁」。如果你到這裏http://en.wikipedia.org/wiki/Code_page#Windows_.28ANSI.29_code_pages,你會發現沒有一個ANSI代碼頁。 – xanatos

+0

好的!我明白了。 – user922907

1

StreamWriter默認通過UTF-8編碼格式讀取,除非明確指定。

嘗試將文本轉換爲Windows編碼,然後嘗試使用相同的代碼再次閱讀。

+0

好的! RichTextBox開放UTF8很好。我的文本是ANSI。是否可以打開ANSI文件而沒有任何問題? – user922907

+0

是如果它是ASCII編碼的。 – MduSenthil

相關問題