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