我正在使用 C# 和 .NET 3.5,尝试使用带有 Microsoft dBase 驱动程序的 ODBC 从旧 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 in dbf (Õ in 850)
pc1 上的 Test.txt:C3 95(UTF-8 中的Õ)
pc2 上的 Test.txt:CF 83(UTF-8 中的 σ)