J'utilise C# et .NET 3.5, en essayant d'importer des données à partir de vieux fichiers dbf en utilisant ODBC avec Microsoft dBase Driver.Problèmes d'encodage avec les fichiers dBase III .dbf sur différentes machines
Les fichiers dbf sont au format dBase III et utilisent le codage ibm850 pour les chaînes. Maintenant, quand j'exécute mon programme sur ma machine, toutes les données de chaîne lues par OdbcDataReader sont converties en UTF-16 ou UTF-8 ou quelque chose, idk et je l'enregistre en UTF-8 et tout va bien, mais lorsque j'essaie d'utiliser ce programme sur une boîte XP, certains caractères ne sont pas convertis correctement en UTF-8. 'Õ' par exemple. Il y en a peut-être d'autres aussi. Des caractères comme 'Ä', 'Ö' et 'Ü' sont acceptables. C'est le problème. Peut-être que l'ODBC ou le pilote utilise des informations de culture de machine ou quelque chose pour tout gâcher.
Est-il possible de lire les chaînes de la base de données en tant que binaires? Peut-être que certaines fonctions comme CONVERT ou CAST? Ou où pourrais-je trouver quelques références pour les fonctions SQL et la syntaxe qui fonctionne pour ce pilote dBase ou d'autres pilotes? J'ai cherché autour et je n'ai rien trouvé. Je me sens si aveugle en utilisant ODBC et SQL.
En ce moment j'utilise un hack temporaire qui remplace tous les σ avec Õ.
Merci!
code Exemple:
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);
Résultat:
E5 dans DBF (Õ 850)
Test.txt sur pc1: C3 95 (O en UTF-8)
Test.txt sur pc2: CF 83 (σ en UTF-8)
Salut im également avoir un problème avec la lecture d'un fichier Dbase, fonctionne très bien lors de la lecture sur mon client Windows suédois mais bouscule les caractères lorsqu'il est exécuté sur un OS anglais, offrez-vous toujours une assistance? – Andreas
@Andreas: écrivez-moi. Quel est le LDID du fichier? Que lisez-vous avec? "bouscule les caractères" n'aide pas. Afficher repr (caractères attendus), repr (caractères réels). Si possible, envoyez-moi votre code et votre fichier. –
Je vous ai envoyé un e-mail sjmachin à lexique dot net – Andreas