Прочитайте файл dBase III, который содержит строки в формате utf-16 LE с C # и OleDb - PullRequest
0 голосов
/ 04 ноября 2018

Я хочу прочитать файл 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-файлов?

...