2010-07-06 210 views
2

问题是在两个步骤中进行分类:Unicode的祸! MS-Access 97中迁移到MS-Access 2007年

问题步骤1. 访问97含有分贝XML被以UTF-8编码的字符串。

的问题归结为:在Access 97中数据块包含了在UTF-8编码的XML字符串。所以我创建了一个补丁工具,用于将XML字符串从UTF-8转换为Unicode。为了隐蔽UTF8字符串为Unicode,我已经使用功能 的MultiByteToWideChar(CP_UTF8,0,PChar类型(ORIGINALNAME),-1,@newname,大小);。(其中newName是声明的数组“newName:WideChar的数组[0..2048];”)。在大多数情况下,我与Spainsh,阿拉伯语,字符核对它

此功能良好。但我正在研究希腊文和中文字符,这令人窒息。

对于一些希腊字符,如“我•我......γ。ISI±二±Î²Î¹Î¬”(存储在访问-97),所得到的新的字符串包含空charaters之间,当它被存储到宽字符的字符越来越剪裁。

对于像“????μ?”这样的一些中文字符(存储在Access-97中的),结果是完全荒谬的,就像“????μ?”。

问题步骤2:访问97分贝文本字符串,应用程序界面采用Unicode输入并保存在Access-97

首先,我用阿拉伯语和Spainish字符核对,似乎那么该编码不需要明确的字符。但是问题又来自希腊和中国的人物。

我想文本转换上述相同的功能(对不对???),结果再次disspointing。 Spainsh字符与out转换正常,得到unicode字符丢失或转换为常规Ascii字母。

希腊,葡萄牙语和字符显示为mentined在步骤1中

请指引我类似的行为。我采取了正确的方法吗?有没有其他的方法? 那么现在我很迷茫,充满问题:)

+0

哪个Delphi版本?从Delphi 2009开始,对Unicode的支持发生了很大变化。 – mjn 2010-07-06 13:36:29

+0

它的Delphi 2006 – Nains 2010-07-06 14:05:06

+0

没有办法将'从UTF-8转换为Unicode',Unicode不是字符编码:)要转换为Access 2007,您需要知道它用于给定数据库表的哪个字符编码,例如UTF -16(与WideChar不同) – mjn 2010-07-06 15:55:51

回答

3

有与希腊字符工作无特殊要求的。真正的问题是,字符存储在Access首先无法识别的编码中。当应用程序将UTF8值存储在数据库中时,它试图将每个单字节转换为数据库代码页中的等效字节。在编码中没有对应关系的每个角色都被替换为?这可能意味着希腊文是好的,而中文文本可能会消失。

为了将数据转换成可读的东西,你必须知道它们存储在。使用这个就可以得到实际的字节,然后将它们转换为Unicode代码页。

+0

实际上,应用程序确实使用代码Pages,即只要用户选择特定语言,就会使用相应的页面代码对其进行编码。问题是它存储在Access-97中。我不确定存储此编码信息时是保存还是丢失。 – Nains 2010-07-06 14:08:41

+1

我指的是数据库中使用的代码页 - 除非您的意思是应用程序在同一字段中使用不同的编码存储字符串。你对希腊字符使用什么代码页? – 2010-07-06 14:39:11

+0

好吧,应用程序使用Win代码页1253来解读来自Access 97的希腊字符。不建议寻找代码页数据库指的是。好吧,我有你的观点,ñ进一步寻找....感谢.. – Nains 2010-07-07 03:41:13