将SysUtils.WrapText()与包含单引号的字符串一起使用

Fab*_*zio 6 delphi escaping delphi-2007 word-wrap

我正在尝试将SysUtils.WrapText()函数与包含转义的单引号字符的字符串一起使用,并且得到了意外的结果。

var
  Lines : TStrings;
begin
  Lines := TStringList.Create;
  try
    Lines.Text := WrapText('Can''t format message, message file not found', 15);
    ShowMessage(Lines.Text);
  finally
    Lines.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

如果字符串包含撇号字符,则该函数似乎根本不会包装字符串。

我也尝试使用#39代码而不是单引号char,但是问题仍然存在。此外,我已经检查过Lines.Count1

图片

我试过删除单引号字符:

var
  Lines : TStrings;
begin
  Lines := TStringList.Create;
  try
    Lines.Text := WrapText('Cant format message, message file not found', 15);
    ShowMessage(Lines.Text);
  finally
    Lines.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

然后开始按预期包装字符串:

图片

我想知道为什么会发生这种情况,以及如何将WrapText()函数与此类字符串一起使用?

Rem*_*eau 5

您所描述的是故意行为

在Delphi XE和更早版本中,WrapText()文档包含以下语句:

WrapText不会在嵌入的带引号的字符串中插入分隔符(支持单引号和双引号)。

从Delphi XE2开始,文档中省略了该语句,但是该行为仍在RTL中实现。

我已经为Embarcadero打开了一张有关此遗漏的票:

RSP-24114:WrapText文档缺少有关嵌入式引号字符串的重要子句