为什么AnsiSameText不是ANSI?

时间:2014-05-03 12:43:57

标签: delphi delphi-xe

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

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

我在这里想念的是什么? 在AnsiStrings单元中有一个ANSI函数,但为什么这个(在Sysutils中)称为'ansi'?

1 个答案:

答案 0 :(得分:11)

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

  • SameTextCompareText等。这些执行了忽略区域设置的比较。
  • AnsiSameTextAnsiCompareText等。这些比较考虑了区域设置。

当引入Unicode时,这些在string上运行的函数现在可以在UTF-16数据上运行。为了向后兼容,它们保留相同的名称,并以相同的方式运行。这是SameText不考虑区域设置,但AnsiSameText确实如此。

因此,虽然这些名称具有误导性,但Ansi前缀只是表示该函数可识别语言环境。值得一提的是,在我看来,即使在Unicode前的Delphi中,Ansi前缀也很差。

区域设置很重要的原因是不同的区域设置对字母排序有不同的规则。