Encoding Probleme mit dBase III .dbf-Dateien auf verschiedenen Computern

Ich verwende C # und .NET 3.5 und versuche, einige Daten aus alten DBF-Dateien mithilfe von ODBC mit dem Microsoft dBase-Treiber zu importieren.

Die DBFs sind im dBase III-Format und verwenden die ibm850-Codierung für Zeichenfolgen.

Nun, wenn ich mein Programm auf meinem Computer ausführe, werden alle aus OdbcDataReader gelesenen Zeichenfolgendaten in UTF-16 oder UTF-8 oder so konvertiert. Idk und ich speichern sie als UTF-8 und alles ist in Ordnung, aber wenn ich es versuche Um dieses Programm auf einer XP-Box zu verwenden, werden einige Zeichen nicht korrekt in UTF-8 konvertiert. 'Õ' zum Beispiel. Es kann auch einige andere geben. Zeichen wie "Ä", "Ö" und "Ü" sind in Ordnung. Das ist das Problem. Vielleicht verwendet der ODBC oder der Treiber einige Informationen zur Maschinenkultur oder etwas, um alles durcheinander zu bringen.

Ist es möglich, Zeichenfolgen aus der Datenbank als Binärdaten zu lesen? Vielleicht einige Funktionen wie CONVERT oder CAST? Oder wo finde ich einige Referenzen für SQL-Funktionen und -Syntax, die für diesen dBase-Treiber oder andere Treiber funktionieren? Ich suchte herum und konnte nichts finden. Ich fühle mich so blind, wenn ich ODBC und SQL verwende.

Im Moment benutze ich einen temporären Hack, der alle σs durch Õs ersetzt.

Vielen Dank

Beispielcode:

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);

Ergebnis

E5 in dbf (Õ in 850)

Test.txt auf pc1: C3 95 (Õ in UTF-8)

Test.txt auf pc2: CF 83 (σ in UTF-8)

Antworten auf die Frage(8)

Ihre Antwort auf die Frage