Проблемы с кодировкой файлов dBase III .dbf на разных компьютерах

Я использую C # и .NET 3.5, пытаюсь импортировать некоторые данные из старых файлов dbf, используя ODBC с Microsoft dBase Driver.

DBF в формате dBase III и используют кодирование ibm850 для строк.

Теперь, когда я запускаю свою программу на моей машине, все строковые данные, считанные из OdbcDataReader, преобразуются в UTF-16 или UTF-8 или что-то в этом роде, мы с idk сохраняем его как UTF-8, и все в порядке, но когда я пытаюсь используйте эту программу в окне XP, некоторые символы не будут правильно преобразованы в UTF-8. 'Õ' например. Могут быть и другие. Такие символы, как «Ä», «Ö» и «Ü» в порядке. Это проблема. Может быть, ODBC или драйвер использует некоторую информацию о культуре машины или что-то еще, чтобы все испортить.

Можно ли читать строки из базы данных как двоичные? Может быть, некоторые функции, такие как CONVERT или CAST? Или где я могу найти ссылки на функции и синтаксис SQL, которые работают для этого драйвера dBase или других драйверов? Я искал вокруг и не мог ничего найти. Я чувствую себя настолько слепым при использовании ODBC и SQL.

Прямо сейчас я использую временный хак, который заменяет все σ на Õ.

Спасибо!

Пример кода:

System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};DriverID=277;Dbq=" + dbPath + ";";
oConn.Open();

System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = @"SELECT name FROM " + dbPath + "TABLE.DBF";

System.Data.Odbc.OdbcDataReader reader = oCmd.ExecuteReader();
reader.Read();

byte[] buf = Encoding.UTF8.GetBytes(reader.GetString(0));
BinaryWriter writer = new BinaryWriter(File.Open(@"C:\DBF\Test.txt", FileMode.Create));
writer.Write(buf);

Результат:

Е5 в дБф (Õ в 850)

Test.txt на ПК1: C3 95 (Õ в UTF-8)

Test.txt на ПК2: CF 83 (σ в UTF-8)

Ответы на вопрос(4)

Ваш ответ на вопрос