我有一个案例,我将从Delphi 7迁移到delphi 2011 XE,令我惊讶的是,由于ansistrings,许多组件会出现问题,在delphi中它们看起来像日文/中文字符,现在是单位我使用的是PCSC连接器,似乎已停止/放弃原始开发人员。
基本上我想要的是一种简单的方法来再次阅读字符串,尽可能少修改原始代码..
如果有关于如何为2009年准备好macse组件ansistring的任何好的教程,那么更新也会帮助我
答案 0 :(得分:9)
@Plastkort,Delphi> = 2009完全能够读取和处理AnsiString。如果你以某种方式将ANSI数据强制转换为Unicode,可能会通过强制转换指向PChar的指针来获得无意义的字符。
如果我必须将其他人的代码转换为Unicode,我首先会搜索PChar,Char和String,并专门查看其他类型难以转换为这些类型的地方。那是因为那些类型改变了意义:在非Unicode delphi中,CHAR是1个字节,现在它是2个字节。
转换本身并不困难,您只需要了解您所面临的问题,并且需要很好地理解您要转换的代码。这需要做很多工作,尤其是在处理“带字符串的智能事物”的代码时。
答案 1 :(得分:1)
Delphi中的重大变化(我认为在Delphi 2009之前)是别名字符串类型;字符串,字符,PChar等,2009年的prios是ANSI字符串类型现在都是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%的方式。
<强>更新强> 在阅读了我的回答和the article referenced by @O.D的评论之后 我认为咬紧牙关和使用Unicode的建议是更明智的选择。