【发布时间】:2017-01-27 15:08:38
【问题描述】:
这是我的第一篇文章,我要感谢大家多年来的帮助。这是我第一次使用论坛,我认为这里是最好的。所以现在够了 :-) 我有以下代码:
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 文件中获取一些数据,它工作正常。但是当其中有特殊字符时,例如ä、ö、é 或类似的东西,那么我只会得到一个问号或其他令人困惑的字符。我尝试将字符集直接添加到连接字符串,但没有成功。然后我尝试在之后转换它,但它仍然无法正常工作。我真的不知道错误在哪里,我希望你们中的任何人都可以帮助我。亲切的问候!
【问题讨论】:
-
为什么要进行所有这些编码转换?如果你执行
drMyDbfFile[5].ToString()会隐式应用编码,是不是正确的? -
是的,它只会对当前行的第 5 列进行编码。在我的产品中,它是整个数据库文件的循环。但是编码不起作用:-(
标签: c# database-connection special-characters dbf dbase