我正在使用C#和.NET 3.5,嘗試使用Microsoft dBase Driver使用ODBC從舊的dbf文件導入某些數據。在不同的計算機上使用dBase III .dbf文件進行編碼
dbf採用dBase III格式,並使用ibm850編碼字符串。
現在,當我在我的機器上運行我的程序時,從OdbcDataReader讀取的所有字符串數據都會轉換爲UTF-16或UTF-8或idk,並將其另存爲UTF-8並且一切正常。當我嘗試在XP中使用此程序時,某些字符未正確轉換爲UTF-8。例如,'Õ'。也可能有其他一些。 'Ä','Ö'和'Ü'等字符都可以。這就是問題。 也許ODBC或驅動程序使用一些機器文化信息或東西搞砸了一切。
是否有可能從數據庫讀取字符串爲二進制?也許有些功能像CONVERT或CAST?或者我可以在哪裏找到適用於這個dBase驅動程序或其他驅動程序的SQL函數和語法的一些參考?我四處搜尋,找不到任何東西。使用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在DBF(O,以850)
Test.txt的上PC1:C3 95(O,以UTF-8)
pc2上的Test.txt:CF 83(UTF-8中的σ)
嗨,即時通訊也有閱讀一個Dbase文件的問題,在我的瑞典語Windows客戶端閱讀時工作正常,但在英語操作系統上運行時會混淆字符,你還在提供幫助嗎? – Andreas 2011-08-25 06:45:04
@Andreas:給我發電子郵件。什麼是文件的LDID?你在讀什麼? 「搞砸人物」並沒有幫助。顯示repr(預期字符),repr(實際字符)。如果可能,請將您的代碼和文件發送給我。 – 2011-08-25 08:29:40
我在詞彙點網向您發送了一封電子郵件sjmachin – Andreas 2011-08-25 13:47:49