问题分为两个步骤:
问题步骤1. 访问97 db,其中包含以UTF-8 编码的XML字符串。
问题可归结为:Access 97 db包含以UTF-8编码的XML字符串。所以我创建了一个补丁工具,用于将XML字符串从UTF-8单独转换为Unicode。为了将UTF8字符串转换为Unicode,我使用了函数 MultiByteToWideChar(CP_UTF8,0,PChar(OriginalName), - 1,@ newName,Size); 。(其中newName是声明为“ newName:Array [0..2048] of WideChar的数组; “)。
这个功能适用于大多数情况,我用西班牙语,阿拉伯语,字符检查过。但我正在研究希腊和中国人物,这是令人窒息的。
对于某些希腊字符,如“Î?Ï...γ.ÎαÎÎÎÎÎÎÎÎÎÎΔ(存储在Access-97 中),结果新字符串中包含空字符,当它被存储为宽字符串,字符被剪裁。
对于某些中文字符,如“?Â?”?(存储在Access-97 中),结果完全荒谬,如“?¢»?μ?”。< / p>
问题步骤2. 访问97 db文本字符串,应用程序GUI获取unicode输入并保存在Access-97中
首先我检查了阿拉伯语和西班牙语字符,然后似乎不需要明确的字符编码。但问题还来自希腊和中国人的角色。
我尝试了上面提到的相同功能进行文本转换(Is It correct ???),结果又一次被忽略了。西班牙语中的字符可以通过转换获得,可以使unicode字符丢失或转换为常规的Ascii字母。
希腊语和中文字符表现出与步骤1中相似的行为。
请指导我。我采取了正确的方法吗?还有其他方法吗??? 那么现在我很困惑,充满了问题:)
答案 0 :(得分:3)
使用希腊字符没有特殊要求。真正的问题是角色存储在Access首先无法识别的编码中。当应用程序将UTF8值存储在数据库中时,它试图将每个字节转换为数据库代码页中的等效字节。在该编码中没有对应关系的每个字符都被替换为?这可能意味着希腊文本没问题,而中文文本可能已经消失。
为了将数据转换为可读的东西,你必须知道它们存储在的代码页。使用它你可以获得实际的字节,然后将它们转换为Unicode。