2014-11-17 6 views
1

네덜란드어 로켈 설정을 사용하여 OSX Yosemite에서 "i"와 "I"의 대소 문자를 구분하지 않습니다. 그러나 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에서 버그입니까? 아니면 누락 된 것이 있습니까?

+0

'CFStringRef'를 초기화 할 때'CFSTR ("i") 매크로 만 사용할 수 있습니다. '대신'NSString'을 CoreFoundation에 연결합니다. 너의 길은 잘못이 아니야. 생각을위한 바로 음식! – Sean

답변

1

네덜란드어는 'ij'라는 글자를 정렬 (조합)하고 변형 할 때 특별한 논리가 필요합니다 (대문자/제목이있을 때 'IJ'가됩니다). 이 두 글자는 종종 네덜란드어 사전 및 언어 보존 기관에 대한 단일 문자 (또는 합자)로 간주됩니다.

CoreFoundation의 적법한 버그와 같은 증상이 실제로 발생합니다. 추가 테스트가 끝나면 'i'로 시작하는 문자열은 CFStringCompareWithOptionsAndLocale이 1 또는 -1을 반환하고 0은 반환하지 않습니다.