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

时间:2009-08-13 21:20:52

标签: c# ado.net string

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

2 个答案:

答案 0 :(得分:4)

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

using (StreamReader reader = new StreamReader(filename, Encoding.Default))
{
    ...
}

强烈建议您尝试在不触及数据库的情况下使其正常工作。读入文件,然后根据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);
    }
}

如果这给出了正确的结果,那么然后尝试将其插入数据库。这样,如果数据库之后看起来仍然“错误”,您就知道问题在于数据库访问而不是文件访问。

答案 1 :(得分:2)

你需要检查三件事:

  1. 打开StreamReader时使用的编码
  2. 数据库服务器上的列类型(nvarchar而不是varchar)
  3. 对列进行的排序规则
  4. 如果其中任何一个错误,当您从数据库读回数据时,您将得到错误的值。