Skip to content

Instantly share code, notes, and snippets.

@atnan
Created March 2, 2013 02:02
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save atnan/5069334 to your computer and use it in GitHub Desktop.
Save atnan/5069334 to your computer and use it in GitHub Desktop.
Is a "café" a "café", and are they the same length?
// $ clang -framework Foundation -o unicode-is-hard-lets-go-shopping unicode-is-hard-lets-go-shopping.m && ./unicode-is-hard-lets-go-shopping
// 2013-03-01 17:56:56.132 unicode-is-hard-lets-go-shopping[3390:707] string1='café', string2='café', string1.length=4, string2.length=5, [string1 isEqualToString:string2]=NO
// 2013-03-01 17:56:56.134 unicode-is-hard-lets-go-shopping[3390:707] precomposedString1='café', precomposedString2='café', precomposedString1.length=4, precomposedString2.length=4, [precomposedString1 isEqualToString:precomposedString2]=YES
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSString *string1 = [NSString stringWithUTF8String:"\x63\x61\x66\xC3\xA9\x00"];
NSString *string2 = [NSString stringWithUTF8String:"\x63\x61\x66\x65\xCC\x81\x00"];
NSString *precomposedString1 = [string1 precomposedStringWithCanonicalMapping];
NSString *precomposedString2 = [string2 precomposedStringWithCanonicalMapping];
NSLog(@"string1='%@', string2='%@', string1.length=%ld, string2.length=%ld, [string1 isEqualToString:string2]=%@", string1, string2, string1.length, string2.length, [string1 isEqualToString:string2] ? @"YES" : @"NO");
NSLog(@"precomposedString1='%@', precomposedString2='%@', precomposedString1.length=%ld, precomposedString2.length=%ld, [precomposedString1 isEqualToString:precomposedString2]=%@", precomposedString1, precomposedString2, precomposedString1.length, precomposedString2.length, [precomposedString1 isEqualToString:precomposedString2] ? @"YES" : @"NO");
}
return EXIT_SUCCESS;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment