Я использую C # и .NET 3.5, пытаюсь импортировать некоторые данные из старых файлов dbf, используя ODBC с драйвером Microsoft dBase.
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);
Результат:
E5 в дБф (Õ в 850)
Test.txt на ПК1: C3 95 (Õ в UTF-8)
Test.txt на ПК2: CF 83 (σ в UTF-8)