我正在尝试使用AnsiSameText以不区分大小写的方式比较OSX上的两个字符串。这曾经可以正常工作,但是在OSX优胜美地上,如果OSX的“首选语言”设置为荷兰语(“系统偏好设置”->“语言和地区”->“首选语言”->“荷兰荷兰语”),这种行为就很奇怪。 。

在下面的代码示例中,我希望它仅显示“ same”。但是我得到“相同,不同,不同”。

program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

begin
  if AnsiSameText('abcde', 'ABCDE') then // Same
    WriteLn('Same')
  else
    WriteLn('Different');

  if AnsiSameText('abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') then // different
    WriteLn('Same')
  else
    WriteLn('Different');

  if AnsiSameText('i', 'I') then // different
    WriteLn('Same')
  else
    WriteLn('Different');
end.


用不区分大小写的方式比较文本的正确方法是什么?

我正在使用Delphi XE7。

最佳答案

Delphi使用从CFLocaleCopyCurrent返回的值初始化UTF8CompareLocale。 UTF8CompareLocale在AnsiSameText内部使用,用于不区分大小写的比较的区域设置。但是,如果OSX的语言设置为荷兰语,则优胜美地OSX认为“ I”和“ i”不同。

在荷兰语系统上调用SetUTF8CompareLocale('en_US');可以解决此问题,而不必修补Delphi单元。

09-19 20:01