jayatubi
jayatubi

Reputation: 2202

How to put unicode char into NSString

For example I could type an emoji character code such as:

NSString* str = @"😊";
NSLog(@"%@", str);

The smile emoji would be seen in the console.

Maybe the code editor and the compiler would trade the literal in UTF-8.

And now I'm working in a full unicode, I mean 32bit per char, environment and I've got the unicode of the emoji, I want to convert the 32bit unicode into a NSString for example:

int charcode = 0x0001F60A;
NSLog(@"%??", charcode);

The question is what should I put at the "??" position and then I could format the charcode into a emoji string?

BTW the charcode was a variable which can not be determine at the compile time.

I don't want to compress the 32bit int into UTF-8 bytes unless that would be the only way.

Upvotes: 2

Views: 894

Answers (2)

Martin R
Martin R

Reputation: 539685

If 0x0001F60A is a dynamic value determined at runtime then you can use the NSString method

- (instancetype)initWithBytes:(const void *)bytes length:(NSUInteger)len encoding:(NSStringEncoding)encoding;

to create a string containing a character with the given Unicode value:

int charcode = 0x0001F60A;
uint32_t data = OSSwapHostToLittleInt32(charcode); // Convert to little-endian
NSString *str = [[NSString alloc] initWithBytes:&data length:4 encoding:NSUTF32LittleEndianStringEncoding];
NSLog(@"%@", str); // 😊

Upvotes: 5

Burhanuddin Sunelwala
Burhanuddin Sunelwala

Reputation: 5343

Use NSString initialization method

int charcode = 0x0001F60A;
NSLog(@"%@", [[NSString alloc] initWithBytes:&charcode length:4 encoding:NSUTF32LittleEndianStringEncoding]);

Upvotes: 2

Related Questions