Problemas de codificación con archivos .dbf de dBase III en diferentes máquinas

Estoy usando C # y .NET 3.5, tratando de importar algunos datos de archivos dbf viejos usando ODBC con Microsoft dBase Driver.

Los dbf están en formato dBase III y utilizan la codificación ibm850 para cadenas.

Ahora, cuando ejecuto mi programa en mi máquina, todos los datos de cadena leídos de OdbcDataReader salen convertidos a UTF-16 o UTF-8 o algo así, idk y lo guardo como UTF-8 y todo está bien, pero cuando intento use este programa en un cuadro de XP, algunos caracteres no se convierten correctamente a UTF-8. 'Õ' por ejemplo. Puede haber algunos otros también. Personajes como 'Ä', 'Ö' y 'Ü' están bien. Este es el problema. Quizás el ODBC o el controlador usen información de cultura de máquina o algo para estropear todo.

¿Es posible leer cadenas de la base de datos como binarias? ¿Quizás algunas funciones como CONVERT o CAST? ¿O dónde podría encontrar algunas referencias para las funciones y la sintaxis de SQL que funcionan para este controlador dBase u otros controladores? Busqué alrededor y no pude encontrar nada. Me siento tan ciego cuando uso ODBC y SQL.

En este momento estoy usando un truco temporal que reemplaza todos los σ por Õ.

¡Gracias!

Código de ejemplo:

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

Resultado:

E5 en dbf (Õ en 850)

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

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta