人们会相信,看看名称,在 SysUtils (Delphi XE) 中定义的 AnsiSameText 将接收 ANSI 字符串作为参数,但该函数的定义如下:
function AnsiSameText(const S1, S2: string): Boolean
我在这里缺少什么?
AnsiStrings 单元中有一个 ANSI 函数,但为什么这个(在 Sysutils 中)称为“ansi”?
最佳答案
在 Unicode 之前的旧版 Delphi 中,有两组字符串比较函数:
SameText
、 CompareText
等。这些执行的比较忽略了语言环境。 AnsiSameText
、 AnsiCompareText
等。这些执行的比较考虑了语言环境。 引入 Unicode 时,这些对
string
进行操作的函数现在对 UTF-16 数据进行操作。为了向后兼容,它们保留相同的名称,并以相同的方式运行。那是 SameText
不考虑语言环境,但 AnsiSameText
可以。因此,虽然名称具有误导性,但
Ansi
前缀仅表示该函数是区域设置感知的。就其值(value)而言,在我看来,即使在 Unicode 之前的 Delphi 中,Ansi
前缀也很差。语言环境很重要的原因是不同的语言环境对字母排序有不同的规则。