У меня есть несколько старых файлов * .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.Я проверил настройки языка и региона компьютера.Любые советы или помощь приветствуется.