我正在尝试使用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单元。