我有以下代码片段,无法编译:
procedure Frob(const Grob: WideString);
var
s: WideString;
begin
s :=
Grob[7]+Grob[8]+Grob[5]+Grob[6]+Grob[3]+Grob[4]+Grob[1]+Grob[2];
...
end;
Delphi5 报错 不兼容的类型
。
我试着简化它:
s := Grob[7];
它是有效的,还有:
s := Grob[7]+Grob[8];
这可能是因为 WideString[index]
没有返回 WideChar
。
我尝试将所有内容强制转换为 WideChars
:
s := WideChar(Grob[7])+WideChar(Grob[8]);
但这也失败了:
不兼容类型
脚注
5
:Delphi 5
s := WideString(Grob[7])+WideString(Grob[8])
相同。你说得对,WideChar
不一定是一个Unicode字形:不仅在BMP区域之外,而且当文本使用变音符号编码时也是如此 - 请参见关于UTF-8和UTF-16比较的这个长(喷子?)线程:Unicode并不容易使用!但OP的问题不是关于这个事实的,而是关于编译问题以及如何在给定文本中交换字符(用于加密?),无论它每个字形有一个还是两个WideChar。 - Arnaud Bouchez