我正在尝试使用 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.
以不区分大小写的方式比较文本的正确方法是什么?
我使用的是 Delphi XE7。
最佳答案
Delphi 使用从 CFLocaleCopyCurrent 返回的值初始化 UTF8CompareLocale。 UTF8CompareLocale 在 AnsiSameText 内部用于区域设置,这些设置用于不区分大小写的比较。但如果 OSX 的语言设置为荷兰语,则 OSX Yosemite 会认为“I”和“i”不同。
在荷兰系统上调用 SetUTF8CompareLocale('en_US');
可以修复该问题,而无需修补 Delphi 单元。
关于macos - 如何在 OSX Yosemite 上以不区分大小写的方式比较文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26970744/