C# 如何在RichTextBox中正确打开UTF-8文件?

C# 如何在RichTextBox中正确打开UTF-8文件?,c#,richtextbox,C#,Richtextbox,我有个问题。这段代码可以用英文文本打开txt文件,但是当我试图用西里尔文打开txt文件时。。。西里尔字母符号是“正方形”。有可能解决这个问题吗 string fileData = openFileDialog1.FileName; StreamReader sr = new StreamReader(fileData); richTextBox.Text = sr.ReadToEnd(); sr.Close();

我有个问题。这段代码可以用英文文本打开txt文件,但是当我试图用西里尔文打开txt文件时。。。西里尔字母符号是“正方形”。有可能解决这个问题吗

        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();

你确定文件是UTF8,对吗?如果您编写字符串
str=sr.ReadToEnd()
,在下一行放置一个断点,然后在Visual Studio中观看
str
,您看到西里尔文了吗?尝试在记事本中打开文件,文件->另存为,然后选择UTF8作为编码


记事本之所以能够“读取”文件,是因为它使用了用户代码页,在您的情况下,它可能是Windows-1251(西里尔文)代码页
StreamReader
尝试以UTF8格式读取文件。如果需要,可以强制
StreamReader
使用不同的代码页。第二个参数是要使用的
编码。为西里尔文传递
Encoding.GetEncoding(1251)
。遗憾的是,除非明确指定,否则您必须知道
编码的“先验”(=之前)读取文件。

StreamWriter,默认情况下以UTF-8编码格式读取


尝试将文本转换为Windows编码,然后用相同的代码再次读取。

你说得对!我的文档的编码是ANSI。但是为什么Windows记事本可以看到这些符号,而RichTextBox不能?记事本试探性地检测编码,它并不总是假设所有文件都是UTF8Ok!RichTextBox的UTF8打开良好。我的文本是ANSI的。是否可以打开ANSI文件而没有任何问题?文本是ANSI格式的。当我在记事本中将其转换为UTF8时,它开始正常打开。记事本不显示代码页。对于ANSI,他指的是“本地单字节单符号代码页”。如果你走到这里,你会看到没有一个ANSI代码页。但是,为什么我不能用UTF8保存文件?我的文件总是保存为ANSI。SavedFile=saveFileDialog1.FileName;SaveFile(SavedFile,RichTextBoxStreamType.PlainText)@user922907
RichTextBox
至少有一个打开的bug,它没有正确加载UTF8文件,可能保存操作也是如此。