我想读取一个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文件?