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

标签 macos delphi 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.

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

我使用的是 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/

相关文章:

java - Maven,带有 OS X 的 JAVA_HOME

c - 在(空)框架中找不到“SLSIsSuppressedByScreenTime”

javascript - 用图像更新页面内的文本

import - 控制 MySQL 转储/导入的日期时间格式

Javascript——检测用户的区域设置是否设置为使用 12 小时或 24 小时时间格式

swift - 在字典中存储和访问对象数组 - Swift 3 - macOS

macos - Mac OS X 中的 Pthreads - 互斥锁问题

android - 推送通知 GCM DELPHI XE8

delphi - 如何防止表单隐藏时任务栏按钮消失

Android 印度尼西亚语文本转语音