Delphi 7 和 Delphi 东京 - 不同的结果相同的功能

Delphi 7 and Delphi Tokyo - Different results same function

我正在将一个用 Delphi 7 编写的旧项目转换为最新版本(Delphi Tokyo),在旧代码中有这个函数可以对文本进行加扰和解密,但是当我阅读使用在 Delphi 东京编译的相同程序的乱码文本只会产生垃圾。

这里有谁知道为什么使用不同版本的 Delphi 编译相同的代码会产生不同的结果?

函数如下:

function TForm2.EnDeCrypt(const Value : String) : String;
var
  CharIndex : integer;
begin
  Result := Value;
  for CharIndex := 1 to Length(Value) do
    Result[CharIndex] := chr(not(ord(Value[CharIndex])));
end; 

从 Delphi 2009 开始,string 类型自动映射到 Unicode 兼容的 UnicodeString 类型。之前,它映射到 AnsiString 类型。

您可以通过明确地使用 AnsiStringAnsiChar 来使用您的例程。

function TForm2.EnDeCrypt(const Value : AnsiString) : AnsiString;
var
  CharIndex : integer;
begin
  Result := Value;
  for CharIndex := 1 to Length(Value) do
    Result[CharIndex] := AnsiChar(not(ord(Value[CharIndex])));
end; 

请注意,如果传递给函数的字符串确实包含无法映射到本地 ANSI 字符集的 unicode 字符,这可能会在运行时导致意外结果。