人们会相信,看看名称,在 SysUtils (Delphi XE) 中定义的 AnsiSameText 将接收 ANSI 字符串作为参数,但该函数的定义如下:

function AnsiSameText(const S1, S2: string): Boolean

我在这里缺少什么?
AnsiStrings 单元中有一个 ANSI 函数,但为什么这个(在 Sysutils 中)称为“ansi”?

最佳答案

在 Unicode 之前的旧版 Delphi 中,有两组字符串比较函数:

  • SameTextCompareText 等。这些执行的比较忽略了语言环境。
  • AnsiSameTextAnsiCompareText 等。这些执行的比较考虑了语言环境。

  • 引入 Unicode 时,这些对 string 进行操作的函数现在对 UTF-16 数据进行操作。为了向后兼容,它们保留相同的名称,并以相同的方式运行。那是 SameText 不考虑语言环境,但 AnsiSameText 可以。

    因此,虽然名称具有误导性,但 Ansi 前缀仅表示该函数是区域设置感知的。就其值(value)而言,在我看来,即使在 Unicode 之前的 Delphi 中,Ansi 前缀也很差。

    语言环境很重要的原因是不同的语言环境对字母排序有不同的规则。

    10-06 09:36