我正在尝试使用AnsiSameText在OSX上以不区分大小写的方式比较两个字符串。这曾经很好地工作,但在OSX Yosemite上,如果OSX的“首选语言”设置为荷兰语(“系统偏好设置” ->“语言和地区” ->“首选语言” ->“Nederlands Dutch”),则会出现奇怪的行为。
在以下代码示例中,我希望它只打印“same”。但我得到“same,different,different”。
在以下代码示例中,我希望它只打印“same”。但我得到“same,different,different”。
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。
AnsiSameText
时会发生什么?您确实拥有它的源代码。 - David HeffernanCFStringCompareWithOptionsAndLocale
返回 -1。在 OSX 10.9 上,AnsiSameText 的工作正常。我尝试了 XE5 和 XE7,在这两个版本上都失败了。只要我将 OSX 10.10 的语言更改为英语,AnsiSameText 就能正常工作。但我不能告诉我的荷兰用户切换他们的操作系统语言。 - Sebastian ZCFStringCompareWithOptionsAndLocale
,并尝试缩小问题所在的范围。听起来好像OSX版本更改是关键。但也可能是Delphi包装器周围的CFStringCompareWithOptionsAndLocale
一直存在问题,而新版本只是突出了这个缺陷。您还可以将示例程序提交到Delphi质量门户,以便EmbA有机会查看该问题。顺便说一句,+1超级MCVE。 - David HeffernanCFStringCompareWithOptionsAndLocale
时使用UTF8CompareLocale
的情况。我想知道如果你传递nil
而不是UTF8CompareLocale
会发生什么。 - David Heffernan