Delphi UTF8解码和D5混淆

Delphi UTF8解码和D5混淆,delphi,utf-8,delphi-5,Delphi,Utf 8,Delphi 5,这有点超出我的深度,但在提出问题之前要努力研究。这有点长,但我会尽我所能做到 我正在尝试编译示例项目。我一直在使用D5ent,因为我退休了,买不起更新的版本,因为我现在只为自己编程 我遇到的第一个问题是PPChar,但一些搜索建议在D5中使用两种方法来复制它 type PPChar = Array[0..0] of PChar; { with Range check off } 或 两者似乎都可以。但在项目的最后部分,为了显示拼写建议,该项目已经 Memo1.Lines.Add(UTF8D

这有点超出我的深度,但在提出问题之前要努力研究。这有点长,但我会尽我所能做到

我正在尝试编译示例项目。我一直在使用D5ent,因为我退休了,买不起更新的版本,因为我现在只为自己编程

我遇到的第一个问题是PPChar,但一些搜索建议在D5中使用两种方法来复制它

type
  PPChar = Array[0..0] of PChar; { with Range check off }

两者似乎都可以。但在项目的最后部分,为了显示拼写建议,该项目已经

Memo1.Lines.Add(UTF8Decode(wrds^));
UTF8Decode在D5中不存在,所以更多的研究在这里出现。

感谢Arnaud,我下载并创建了两个单元Syncomons和SynLZ(Syncomons需要)。我加入了Arnaud描述的例行程序,然后更改了项目

Memo1.Lines.Add(UTF8Decode(wrds^));

这可以编译,但当我运行项目时,我会得到一个图形字符列表

最后,问题是: 我做错了什么? 我如何让它工作


谢谢

什么是wrds?SizeOf(@something)总是4(指针的大小)。@kobik:它可能会胡言乱语,但也可能不会。这取决于实际数据。解码UTF-8会产生一个Unicode字符串,在D5中为
WideString
。将
WideString
分配给
AnsiString
执行数据转换,从而产生尽可能与原始Unicode字符匹配的Ansi字符。比如,想想欧元符号。许多Ansi字符集支持该字符。然而,我确实同意TNT应该用来显示原始的Unicode数据,而不是将其转换为Ansi。@RemyLebeau,“它可能会显示胡言乱语,但也可能不会。”:谢谢你的澄清,但我认为这是显而易见的:)你当然是100%正确的+谢谢各位。我没有听说过TNT组件,但从网站上下载并运行了安装程序。它已经检查了D5的安装,它确实创建了文件夹并把东西放进去了。但是,Delphi的最低版本是D6,该软件包不会安装。您可以从-
上一个Delphi 5版本
下载TNT。也看看
Memo1.Lines.Add(UTF8Decode(wrds^));
Memo1.Lines.Add(UTF8DecodeToString(@wrds,SizeOf(@wrds)));