为什么AnsiSameText不是ANSI?

WeG*_*ars 4 delphi delphi-xe

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

function AnsiSameText(const S1, S2: string): Boolean
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?
在AnsiStrings单元中有一个ANSI函数,但为什么这个(在Sysutils中)称为'ansi'?

Dav*_*nan 11

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

  • SameText,CompareText等,这些执行的比较的是忽略区域设置.
  • AnsiSameText,AnsiCompareText等等.这些进行比较的是把区域考虑.

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

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

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