我在C#中创建了一个源代码,它接受了一个txt文档的每一行并将其放在一个列表中。之后,我试图在列表框中显示它们,但我得到希腊字符的未知符号。这是我的代码:
public Form1()
{
InitializeComponent();
const string f = "TextFile1.txt";
// 1
// Declare new List.
List<string> lines = new List<string>();
// 2
// Use using StreamReader for disposing.
using (StreamReader r = new StreamReader(f))
{
// 3
// Use while != null pattern for loop
string line;
while ((line = r.ReadLine()) != null)
{
// 4
// Insert logic here.
// ...
// "line" is a line in the file. Add it to our List.
lines.Add(line);
}
}
// 5
// Print out all the lines.
foreach (string s in lines)
{
listBox1.Items.Add(s);
Console.WriteLine(s);
}
}
我的TextFile1.txt:
您好! Γείασου!
列表框中的结果是:
您好! ???? ???!
我怎么能接受希腊字符?
答案 0 :(得分:4)
您需要在StreamReader
的构造函数中明确指定编码,或者确保文件本身指定正确的编码。如果不指定,StreamReader
将尝试自动检测文件的编码。
来自http://msdn.microsoft.com/en-us/library/ms143456(v=vs.110).aspx:
StreamReader对象尝试通过查看来检测编码 流的前三个字节。
它检查文件的前3个字节,它应使用字节顺序标记指定编码,但如果文件中指定的编码错误,则可以使用StreamReader
构造函数覆盖它。您还需要在StreamReader构造函数中指定该选项,以便在它存在且不正确时不尝试读取字节顺序标记。请参阅http://msdn.microsoft.com/en-us/library/akzyzwh9(v=vs.110).aspx。