C #. DBF получает случайное кодирование с Jet 4.0 - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть несколько старых файлов * .dbf, которые содержат данные, закодированные в кодировке windows-1257.Я открываю dbf файлы с помощью OleDBConnection со следующей строкой подключения:

    constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
               filePath
               + ";Extended Properties=dBASE IV";

Очень странно, что после чтения файла в объект DataSet он дополнительно кодируется в кодировке ISO-8859-1.Поэтому, когда я помещал его в текстовое поле winforms, я получал некоторые странные символы как Ō.Узнав, что данные были добавлены в ISO-8859-1, использовал это, чтобы преобразовать обратно в 1257, и это действительно помогло мне:

Encoding from = Encoding.GetEncoding("ISO-8859-1");
Encoding to = Encoding.GetEncoding(1257);

foreach (DataRow dataRow in dataSet.Rows)
{
    foreach (DataColumn dataColumn in dataSet.Columns)
    {
        if (dataColumn.DataType != typeof(string) || dataRow[dataColumn] == DBNull.Value)
        {
            continue;
        }
        dataRow[dataColumn] = to.GetString(from.GetBytes(dataRow[dataColumn].ToString()));
    }
}

Но как только я использовал этот код на другом ПК, он DataSet объект начал кодировать его самостоятельно в другой кодировке (не 8859-1).Я понятия не имею, чтобы остановить его, или контролировать, или, по крайней мере, изменить его на кодировку, которую я хочу.

Я попытался сравнить регистры Jet / 4.0 / windows.Я проверил настройки языка и региона компьютера.Любые советы или помощь приветствуется.

...