如何从文件中读取特殊字符?

bsh*_*52s 2 c# string ado.net

在C#中,我正在从文本文件中读取插入SQL语句,然后尝试使用ADO.NET在数据库上执行它们。其中一些查询在其中一列中包含希腊字符。具体来说,Mu(看起来很笨重的u)用于微秒(usec)。问题在于问号实际上是插入到数据库中的(?sec)。但是,我感觉问题出在读取文本文件中,因为调试器还在钻石内部显示了一个问号。我正在使用StreamReader的ReadLine方法。我究竟做错了什么?

Jon*_*eet 5

问题几乎可以肯定是您在读取文件时使用了错误的编码。您知道文本文件实际使用的编码方式吗?默认情况下,大多数.NET API使用UTF-8,但是您的文件可能采用了操作系统的默认编码,该编码由Encoding.Default表示。尝试这个:

using (StreamReader reader = new StreamReader(filename, Encoding.Default))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我也强烈建议您尝试使其正常工作而不接触数据库。读入文件,然后按照其Unicode编码打印出字符串中的字符:

public static void DumpString(string text)
{
    Console.WriteLine("Text: '{0}'", text);
    foreach (char c in text)
    {
        Console.WriteLine("{0}: U+{1:x4}", c, (int) c);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果给出正确的结果,尝试将其插入数据库。这样,如果之后数据库仍然看起来“错误”,则说明问题出在数据库访问而不是文件访问上。