Problemas de codificação com arquivos .dbf do dBase III em diferentes máquinas

Estou usando C # e .NET 3.5, tentando importar alguns dados de arquivos dbf antigos usando ODBC com o Microsoft dBase Driver.

Os dbf estão no formato dBase III e usam a codificação ibm850 para seqüências de caracteres.

Agora, quando executo meu programa na minha máquina, todos os dados de string lidos no OdbcDataReader são convertidos para UTF-16 ou UTF-8 ou algo assim, idk e eu o salvo como UTF-8 e tudo está bem, mas quando tento use este programa em uma caixa XP, alguns caracteres não são convertidos corretamente em UTF-8. 'Õ' por exemplo. Pode haver alguns outros também. Personagens como 'Ä', 'Ö' e 'Ü' estão ok. Este é o problema. Talvez o ODBC ou o driver use algumas informações sobre a cultura da máquina ou algo para atrapalhar tudo.

É possível ler as strings do banco de dados como binárias? Talvez algumas funções como CONVERT ou CAST? Ou onde eu poderia encontrar algumas referências para funções e sintaxe SQL que funcionem para esse driver dBase ou outros drivers? Eu procurei e não consegui encontrar nada. Eu me sinto tão cego ao usar ODBC e SQL.

No momento, estou usando um hack temporário que substitui todos os σ por Õ.

Obrigado!

Código de exemplo:

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 em dbf (Õ em 850)

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

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

questionAnswers(3)

yourAnswerToTheQuestion