【问题标题】:How to put unicode char into NSString如何将 unicode char 放入 NSString
【发布时间】:2015-04-05 05:57:03
【问题描述】:

例如,我可以输入一个表情符号字符代码,例如:

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

会在控制台中看到微笑表情符号。

也许代码编辑器和编译器会在 UTF-8 中交换文字。

现在我正在使用完整的 unicode,我的意思是每个字符 32 位,环境并且我已经获得了 emoji 的 unicode,我想将 32bit unicode 转换为 NSString,例如:

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

问题是我应该在“??”位置,然后我可以将字符代码格式化为表情符号字符串?

顺便说一句,charcode 是一个在编译时无法确定的变量。

我不想将 32 位 int 压缩成 UTF-8 字节,除非那是唯一的方法。

【问题讨论】:

  • 我不明白你的意思或你的问题是什么,但你可以使用@"\U0001F60A"
  • 字符代码是动态的,例如从数据库或其他地方读取

标签: ios objective-c unicode nsstring


【解决方案1】:

如果0x0001F60A 是在运行时确定的动态值,则 你可以使用NSString方法

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

创建一个包含具有给定 Unicode 值的字符的字符串:

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

【讨论】:

  • 谢谢哥们。我一直在寻找解决方案。
【解决方案2】:

使用NSString初始化方法

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多