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.
Delphi 使用从 CFLocaleCopyCurrent 返回的值初始化 UTF8CompareLocale。UTF8CompareLocale 在 AnsiSameText 内部用于区域设置,这些设置用于不区分大小写的比较。但如果 OSX 的语言设置为荷兰语,则 OSX Yosemite 会认为“I”和“i”不同。
调用SetUTF8CompareLocale('en_US');荷兰系统即可解决问题,而无需修补德尔福单元。