2010-07-06 7 views
2

problème est classé en deux étapes:Unicode Malheur! Ms-Access 97 migration vers Ms-Access 2007

problème Étape 1. Access 97 db contenant des chaînes XML qui sont codés en UTF-8. Le problème se résume à ceci: la base de données Access 97 contient des chaînes XML codées en UTF-8. J'ai donc créé un outil de patch pour une conversion séparée pour les chaînes XML de UTF-8 à Unicode. Afin de convertir la chaîne UTF8 en Unicode, j'ai utilisé la fonction MultiByteToWideChar (CP_UTF8, 0, PChar (Nom d'origine), -1, @nouveau, Taille); (où newName est un tableau tel que déclaré "nouveauName: tableau [0..2048] de WideChar;").

Cette fonction fonctionne bien dans la plupart des cas, je l'ai vérifié avec les caractères Spainsh, Arabe. mais je travaille sur les caractères grecs et chinoisese ça étouffe.

Pour certains caractères grecs comme « I • ... Ï i³. Isi ± ± ïI βιά » (telle qu'elle est stockée dans Access-97), la nouvelle chaîne résultante contient charaters nul entre les deux, et quand il est stocké à chaîne large, les caractères sont tronqués.

Pour certains caractères chinois comme "? Â ¢ Â? Âμ?" (comme stocké dans Access-97), le résultat est totalement absurde comme "? ¢"? Μ? ".

problème Étape 2. Access 97 db chaînes de texte, GUI application prend entrée unicode et enregistré dans Access-97

D'abord, je vérifié avec l'arabe et Spainish caractères, il semble donc que pas de caractères explicites codage est requis . Mais encore une fois le problème vient avec les caractères grecs et chinois.

J'ai essayé la même fonction mentionnée ci-dessus pour la conversion de texte (Est-ce correct ???), le résultat était à nouveau dissidence. Les caractères de Spainsh qui sont ok avec la conversion dehors, obtiennent le caractère d'Unicode soit perdu ou converti en Alphabets ascii réguliers.

Les caractères grecs et Chineese montre un comportement similaire à celui mentined à l'étape 1.

S'il vous plaît me guider. Est-ce que je prends la bonne approche? Y at-il un autre moyen de contourner ??? Eh bien maintenant je suis confus et plein de questions :)

+0

Quelle version de Delphi? Depuis Delphi 2009, la prise en charge d'Unicode a beaucoup changé. – mjn

+0

Son Delphi 2006 – Nains

+0

Il n'y a aucun moyen de 'convertir de UTF-8 en Unicode', Unicode n'est aucun encodage de caractères :) Pour convertir en Access 2007 vous devez savoir quel codage de charcter utilise pour les tables de base de données, par exemple UTF -16 (ce qui n'est pas la même chose que WideChar) – mjn

Répondre

3

Il n'y a aucune exigence particulière pour travailler avec des caractères grecs. Le vrai problème est que les caractères ont été stockés dans un encodage que Access ne reconnaît pas en premier lieu. Lorsque l'application stockait les valeurs UTF8 dans la base de données, elle essayait de convertir chaque octet en un octet équivalent dans la page de codes de la base de données. Tous les caractères qui n'avaient pas de correspondance dans cet encodage ont été remplacés par? Cela peut signifier que le texte grec est OK, alors que le texte chinois peut être parti. Pour convertir les données en données lisibles, vous devez connaître la page de code dans laquelle elles sont stockées. Vous pouvez ainsi obtenir les octets réels et les convertir en Unicode.

+0

En fait, l'application utilise en effet le code Pages, c'est-à-dire que dès que l'utilisateur slectionne un langage spécifique, le code de page respectif est utilisé pour le coder. Le problème est son stocké dans Access-97. Je ne suis pas sûr que lors du stockage de cette information d'encodage est enregistré ou perdu. – Nains

+1

Je faisais référence à la page de codes utilisée dans la base de données - sauf si vous voulez dire que l'application stocke des chaînes utilisant des codages différents dans le même champ. Quelle page de code utilisez-vous pour les caractères grecs? –

+0

Eh bien, l'application utilise la page de code Win 1253 pour interpréter les caractères grecs à partir d'Access 97. Il n'est pas recommandé de rechercher une page de code. Ok, j'ai eu votre point, je cherche pour cela plus loin .... Merci .. – Nains

Questions connexes