如何在OSX Yosemite上以不区分大小写的方式比较文本

Seb*_*n Z 5 delphi macos locale firemonkey osx-yosemite

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

在下面的代码示例中,我希望它只打印"相同".但我得到"相同,不同,不同".

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.
Run Code Online (Sandbox Code Playgroud)

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

我正在使用Delphi XE7.

Seb*_*n Z 0

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

调用SetUTF8CompareLocale('en_US');荷兰系统即可解决问题,而无需修补德尔福单元。