C++ 不幸!Ms Access 97迁移到Ms Access 2007

C++ 不幸!Ms Access 97迁移到Ms Access 2007,c++,delphi,unicode,windows,C++,Delphi,Unicode,Windows,问题分为两个步骤: 问题1访问包含UTF-8编码的XML字符串的97 db 问题归结为:Access 97 db包含以UTF-8编码的XML字符串。因此,我创建了一个补丁工具,用于将XML字符串从UTF-8单独转换为Unicode。为了将UTF8字符串转换为Unicode,我使用了函数 MultiByteToWideChar(CP_UTF8,0,PChar(原始名称),-1,@newName,Size)(其中newName是声明的数组“newName:WideChar的数组[0..2048];”

问题分为两个步骤:

问题1访问包含UTF-8编码的XML字符串的97 db

问题归结为:Access 97 db包含以UTF-8编码的XML字符串。因此,我创建了一个补丁工具,用于将XML字符串从UTF-8单独转换为Unicode。为了将UTF8字符串转换为Unicode,我使用了函数 MultiByteToWideChar(CP_UTF8,0,PChar(原始名称),-1,@newName,Size)(其中newName是声明的数组“newName:WideChar的数组[0..2048];”)

这个函数在大多数情况下都很好用,我已经用Spainsh、阿拉伯语和其他字符检查过了。但我正在研究希腊和中国汉字,这让人窒息

对于一些希腊字符,如“Ευγ.ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ等(存储

对于某些中文字符,如“、µ?”(存储在Access-97中),其结果与“、µ?””一样完全荒谬

问题第二步Access 97 db文本字符串,应用程序GUI采用unicode输入并保存在Access-97中

首先,我检查了阿拉伯语和西班牙语字符,似乎不需要显式字符编码。但希腊和中国的汉字同样存在问题

我尝试了上面提到的相同的文本转换功能(正确吗??),结果再次失败。Spainsh字符如果不进行转换,则会丢失unicode字符或转换为常规Ascii字母

希腊和中国字符显示出与步骤1中定义的行为相似的行为

请引导我。我是否采取了正确的方法?还有别的办法吗???
好吧,现在我很困惑,充满了问题:)

使用希腊字符没有特殊要求。真正的问题是,字符存储在Access一开始无法识别的编码中。当应用程序将UTF8值存储在数据库中时,它尝试将每个字节转换为数据库代码页中的等效字节。在该编码中没有对应关系的每个字符都被替换为?这可能意味着希腊文本还可以,而中国文本可能已经消失


为了将数据转换为可读的内容,您必须知道它们存储的代码页。使用它,您可以获得实际的字节,然后将它们转换为Unicode。

哪个Delphi版本?从Delphi 2009开始,对Unicode的支持发生了很大的变化。无法“从UTF-8转换为Unicode”,Unicode没有字符编码:)要转换为Access 2007,您需要知道它对给定数据库表使用的字符编码,例如UTF-16(实际上与WideChar不同),应用程序确实使用了代码页,即,一旦用户选择了特定的语言,就使用相应的页面代码对其进行编码。问题是它存储在Access-97中。我不确定存储此编码信息时是否保存或丢失。我指的是数据库中使用的代码页-除非您的意思是应用程序在同一字段中存储使用不同编码的字符串。您使用什么代码页来表示希腊字符?应用程序使用Win代码页1253来来回解释Access 97中的希腊字符。建议查找代码页数据库的N u r正在引用。好的,我明白你的意思了,继续找这个。。。。谢谢..假设数据库使用UTF-8代码页,我正在存储应用程序中的CJK(中文、日文、韩文)大字符串。结果将是错误的编码,例如此中文字符“?½/?«?Ã俎俎俎俎?”。现在我的问题是:有没有办法成功地检索这些字符???