读取dBase III文件,该文件包含具有C#和OleDb的utf-16 LE格式的字符串

时间:2018-11-04 20:26:35

标签: c# character-encoding oledb dbase

我想读取一个dBase III文件,其中包含带有utf-16 little-endian编码字符串的字符列。这是通过c#和System.Data.OleDb类完成的。

我的代码如下

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"dBASE III;\";Data Source=" + filePath + ";"
using (var conn = new System.Data.OleDb.OleDbConnection(connectionString))
{
    conn.Open();
    string strQuery = "SELECT * FROM [" + System.IO.Path.GetFileName(fileName) + "]";
    var adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
    adapter.Fill(ds);
}
dataGrid.ItemsSource = ds.Tables[0].DefaultView;

在值为John的字符列中,十六进制编辑器在dbf文件(4A 00 6F 00 68 00 6E 00)中向我显示了John,但是在每个字符字节之后都有一个空字节)。我假设字符串的dbf文件中使用的编码为utf-16 little endian。默认的字符串处理仅产生第一个字符,以第一个空字节结尾,因此我只看到J的结果。

如何正确编码?是我需要告诉OleDb连接的事情,还是在读取数据后必须手动逐字节转换每个字符字段?

是否有更好的方式读取dbase文件?

0 个答案:

没有答案