"i"和"I"的不区分大小写比较在 OSX Yosemite 上的荷兰语区域设置中失败



我正在尝试使用荷兰语区域设置在OSX Yosemite上对"i"和"I"进行不区分大小写的比较。但是OSX一直告诉我,字符串是不同的。如果我将区域设置更改为"en_US",则比较按预期工作。

以下 xcode "命令行工具"项目可用于演示该问题。

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        CFStringRef s1 = (__bridge CFStringRef)@"i";
        CFStringRef s2 = (__bridge CFStringRef)@"I";
        CFLocaleRef tmpLocale = CFLocaleCreate(nil, (__bridge CFStringRef)@"nl_NL"); // or // CFLocaleRef tmpLocale = CFLocaleCopyCurrent(); on a Dutch OSX
        int result = CFStringCompareWithOptionsAndLocale(s1, s2, CFRangeMake(0, 1), kCFCompareCaseInsensitive, tmpLocale);
        CFRelease(tmpLocale);
        NSLog(@"%d", result);
        if (result == 0) NSLog(@"same"); else NSLog(@"different");
    }
    return 0;
}

这是OSX中的错误还是我缺少什么?

荷兰语在排序(整理)和转换二合字母"ij"(大写/标题大小写时变为"IJ")时确实需要一些特殊的逻辑。这两个字母通常被认为是荷兰词典及其语言保存机构的单个字母(甚至连字)。

你正在经历的确实闻起来像CoreFoundation中的一个合法错误。经过进一步测试,任何以"i"开头的字符串都会导致CFStringCompareWithOptionsAndLocale返回 1 或 -1,而不是 0。

最新更新