Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Character code in NSString to unicode character

I have an NSString with a charactercode like this: 0x1F514. I want to take this NSString and add it to another NSString, but not with the literal value of it, but the icon hidden behind it. In this case an emoticon of a bell.

How can I easily convert this NSString to show the emoticon instead of the character code?

like image 922
Simen Øian Gjermundsen Avatar asked Dec 06 '25 09:12

Simen Øian Gjermundsen


1 Answers

Something like this would do:

NSString *c = @"0x1F514";

unsigned intVal;
NSScanner *scanner = [NSScanner scannerWithString:c];
[scanner scanHexInt:&intVal];

NSString *str = nil;
if (intVal > 0xFFFF) {
    unsigned remainder = intVal - 0x10000;
    unsigned topTenBits = (remainder >> 10) & 0x3FF;
    unsigned botTenBits = (remainder >>  0) & 0x3FF;

    unichar hi = topTenBits + 0xD800;
    unichar lo = botTenBits + 0xDC00;
    unichar unicodeChars[2] = {hi, lo};
    str = [NSString stringWithCharacters:unicodeChars length:2];
} else {
    unichar lo = (unichar)(intVal & 0xFFFF);
    str = [NSString stringWithCharacters:&lo length:1];
}

NSLog(@"str = %@", str);

The reason simply @"\u1f514" doesn't work is because those \u values cannot be outside the BMP, i.e. >0xFFFF, i.e. >16-bit.

So, what my code does is check for that scenario and does the relevant surrogate pair magic to make the right string.

Hopefully that is actually what you want and makes sense!

like image 180
mattjgalloway Avatar answered Dec 07 '25 23:12

mattjgalloway



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!