Я хочу прочитать файл dBase III, который содержит символьные столбцы с кодированными в UTF-16 строками. Это делается с помощью 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
шестнадцатеричный редактор показывает мне 4A 00 6F 00 68 00 6E 00
в dbf-файле (то есть John
, но после каждого байта символа есть нулевой байт). Я предполагаю, что используемая кодировка в dbf-файле для строк - это utf-16 little endian. Обработка строк по умолчанию приводит только к первому символу, заканчивается первым нулевым байтом, поэтому в результате я вижу только J
.
Как я могу получить правильную кодировку? Мне нужно указать соединение OleDb или мне нужно преобразовать каждое символьное поле вручную после считывания данных?
Есть ли лучший способ чтения dbase-файлов?