Я пытаюсь сделать нечувствительное к регистру сравнение «i» и «I» на OSX Yosemite с использованием настроек голландского языка. Но OSX продолжает говорить мне, что строки разные. Если я изменю локаль на «en_US», сравнение будет работать, как ожидалось.Нечувствительное к регистру сравнение «i» и «I» не выполняется с настройками голландского языка в OSX Yosemite
Для демонстрации проблемы может использоваться следующий проект «инструмент командной строки» 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 или есть что-то, что мне не хватает?
При инициализации 'CFStringRef' вы можете просто использовать макрос 'CFSTR (« i ») 'вместо того, чтобы навести 'NSString' до CoreFoundation. Но ваш путь не ошибается. Просто пища для размышлений! – Sean