Я использую C# и .NET 3.5, пытаясь импортировать некоторые данные из старых файлов dbf с помощью ODBC с драйвером Microsoft dBase.Проблемы с кодировкой файлов dBase III .dbf на разных машинах
dbf находятся в формате dBase III и используют кодировку ibm850 для строк.
Теперь, когда я запускаю свою программу на своей машине, все строковые данные, считываемые из OdbcDataReader, выводятся в UTF-16 или UTF-8 или что-то в этом роде, и я сохраняю его как 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 в DBF (О в 850)
Test.txt на ПК1: С3 95 (Х в UTF-8)
Test.txt на pc2: CF 83 (σ в UTF-8)
Привет, у меня также есть проблемы с чтением файла Dbase, отлично работает при чтении на моем шведском клиенте Windows, но запутывает символы при запуске на английском языке os, вы все еще предлагаете помощь? – Andreas
@ Андреас: напишите мне. Что такое LDID файла? С чем вы его читаете? «messes up characters» не помогает. Показать превью (ожидаемые символы), repr (фактические символы). Если возможно, пришлите мне свой код и свой файл. –
Я отправил вам письмо sjmachin в lexicon dot net – Andreas