我在这里有一个案例,我打算从 Delphi 7 迁移到 delphi 2011 XE,令我惊讶的是,许多组件会因为 ansistrings 而出现问题,在 delphi xe 中它们看起来像日文/中文字符,现在我使用的单位是一个 PCSC 连接器,似乎已从原始开发人员中停产/放弃。
基本上我想要的是一种简单的方法来再次读取字符串,尽可能少地修改原始代码..
另外,如果有任何关于如何为 2009 年及更新版本准备好组件 ansistring 的好的教程也会对我有所帮助
我在这里有一个案例,我打算从 Delphi 7 迁移到 delphi 2011 XE,令我惊讶的是,许多组件会因为 ansistrings 而出现问题,在 delphi xe 中它们看起来像日文/中文字符,现在我使用的单位是一个 PCSC 连接器,似乎已从原始开发人员中停产/放弃。
基本上我想要的是一种简单的方法来再次读取字符串,尽可能少地修改原始代码..
另外,如果有任何关于如何为 2009 年及更新版本准备好组件 ansistring 的好的教程也会对我有所帮助
@Plastkort,Delphi >= 2009 完全能够读取和处理 AnsiString。如果您以某种方式将 ANSI 数据硬转换为 Unicode(可能是通过硬转换指向 PChar 的指针),您只会得到无意义的字符。
如果我必须将其他人的代码转换为 Unicode,我会首先搜索 PChar、Char 和 String,并专门查看其他类型被硬转换为这些类型的地方。那是因为这些类型改变了含义:在非 Unicode delphi 中,CHAR 是 1 个字节,现在是 2 个字节。
转换本身并不难,您只需要了解您面临的问题并且您需要对您正在转换的代码有很好的理解。而且工作量很大,尤其是在处理“使用字符串进行智能处理”的代码时。
Delphi(我认为在 Delphi 2009 之前)的重大变化是别名字符串类型;在 2009 年之前是 ANSI 字符串类型的 string、Char、PChar 等现在都是 WideChar 类型。
所以
Type | Delphi 6,7 | Delphi 2009, XE
-------+------------+----------------
string | AnsiString | UnicodeString
char | AnsiChar | WideChar
pchar | PAnsiChar | PWideChar
从 Ansi Delphi 迁移到 Unicode Delphi 的最简单方法是全局搜索和替换别名字符串类型,将它们替换为显式的 8 位 ANSI 等效项(即用 AnsiString 替换所有字符串,用 PAnsiChar 替换 PChar 等...)
这应该可以让你完成 90% 的工作。
更新 在阅读了对我的回答的评论和@OD 引用的文章之后, 我认为硬着头皮使用 Unicode 的建议是更明智的选择。