patrickS
patrickS

Reputation: 3760

NSString with Emojis

I have a NSArray containing NSStrings with emoji codes in the following format:

0x1F463

How can I now convert them into a NSString with the correct format?

With this method I am able to generate an "Emoji"-NSString:

NSString *emoji = [NSString stringWithFormat:@"\U0001F463"];

But this is only possible with constant NSStrings. How can I convert the whole NSArray?

Upvotes: 3

Views: 4835

Answers (2)

Extra Savoir-Faire
Extra Savoir-Faire

Reputation: 6036

Not my best work, but it appears to work:

for (NSString *string in array)
{
    @autoreleasepool {
        NSScanner *scanner = [NSScanner scannerWithString:string];
        unsigned int val = 0;
        (void) [scanner scanHexInt:&val];
        NSString *newString = [[NSString alloc] initWithBytes:&val length:sizeof(val) encoding:NSUTF32LittleEndianStringEncoding];
        NSLog(@"%@", newString);
        [newString release]; // don't use if you're using ARC
    }
}

Using an array of four of your sample value, I get four pairs of bare feet.

Upvotes: 4

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 727027

You can do it like this:

NSString *str = @"0001F463";
// Convert the string representation to an integer
NSScanner *hexScan = [NSScanner scannerWithString:str];
unsigned int hexNum;
[hexScan scanHexInt:&hexNum];
// Make a 32-bit character from the int
UTF32Char inputChar = hexNum;
// Make a string from the character
NSString *res = [[NSString alloc] initWithBytes:&inputChar length:4 encoding:NSUTF32LittleEndianStringEncoding];
// Print the result
NSLog(@"%@", res);

Upvotes: 2

Related Questions