C#dbase IV读取特殊字符

C#dbase IV读取特殊字符,c#,database-connection,special-characters,dbf,dbase,C#,Database Connection,Special Characters,Dbf,Dbase,这是我的第一篇帖子,我想感谢大家多年来的帮助。这是我第一次使用论坛,我认为这里的论坛是最好的。现在我有以下代码: public void ConnectToDBF(string pathToFile, string fileName) { string constr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathToFile + ";Extended Properties=\"dBASE IV;Cha

这是我的第一篇帖子,我想感谢大家多年来的帮助。这是我第一次使用论坛,我认为这里的论坛是最好的。现在我有以下代码:

public void ConnectToDBF(string pathToFile, string fileName)
     {
         string constr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathToFile + ";Extended Properties=\"dBASE IV;CharacterSet=1251;IMEX=1\"";
         using (OleDbConnection con = new OleDbConnection(constr))
         {
             var sql = "select * from " + fileName;
             OleDbCommand cmd = new OleDbCommand(sql, con);
             con.Open();
             DataSet dsMyDbfFile = new DataSet(); ;
             OleDbDataAdapter da = new OleDbDataAdapter(cmd);
             da.Fill(dsMyDbfFile);
             con.Close();

             DataRow drMyDbfFile = dsMyDbfFile.Tables[0].Rows[0];
             string test = drMyDbfFile[0].ToString();

             Encoding wind1251 = Encoding.GetEncoding(1251);
             Encoding utf8 = Encoding.UTF8;
             byte[] wind1251Bytes = wind1251.GetBytes(drMyDbfFile[5].ToString());
             byte[] utf8Bytes = Encoding.Convert(wind1251, utf8, wind1251Bytes);
             string utf8String = Encoding.UTF8.GetString(utf8Bytes);

         }

我试图从dbf文件中获取一些数据,但效果很好。但是如果里面有特殊的字符,比如ä、ö、é或类似的东西,那么我只会得到一个问号或其他令人困惑的字符。我试图将字符集直接添加到connectionstring,但没有成功。后来我试着转换它,但仍然不起作用。我真的不知道错误在哪里,我希望你们中的任何人都能帮助我。亲切的问候

文件名中应使用[]括号

看到这个问题了吗


您应该在文件名中使用[]括号

看到这个问题了吗


为什么要进行这些编码转换?如果执行将隐式应用编码的
drMyDbfFile[5].ToString()
,是否正确?是的,它将只对当前行的第5列进行编码。在我的prod中,它是一个遍历整个DB文件的循环。但是编码不起作用:-(为什么要进行所有这些编码转换?如果执行
drMyDbfFile[5]。ToString()
,它将隐式应用编码,不是吗?。是的,它将只对当前行的第5列进行编码。在我的产品中,它是整个DB文件的循环。但是编码不起作用:-(你是指括号而不是*还是围绕文件名变量?到目前为止,我在文件名变量周围尝试了它,但它不起作用。仍然有一个?而不是特殊字符。你是指括号而不是*还是围绕文件名变量?到目前为止,我在文件名变量周围尝试了它,但它不起作用。仍然有一个?而不是特殊字符。)半焦