【问题标题】:NSString with Emojis带有表情符号的 NSString
【发布时间】:2012-12-09 13:41:57
【问题描述】:

我有一个 NSArray,其中包含 NSStrings 和以下格式的表情符号:

0x1F463

我现在如何将它们转换为具有正确格式的 NSString?

通过这种方法,我可以生成“Emoji”-NSString:

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

但这只有在使用常量 NSString 时才有可能。如何转换整个 NSArray?

【问题讨论】:

  • -stringWithFormat: 没有生成任何东西——你自己在你给它的字符串常量中做这件事。 (更不用说你在滥用-stringWithFormat:;你没有为它提供格式化字符串。)我不明白你的数组中的字符串有什么问题。为什么它们不按原样工作?
  • 我必须将字符串 "0x1F463" 转换为 "\U0001F463" 来处理作为表情符号的 unicode 字符。但我从外部 plist 获得 NSArray
  • 所以您是说您的数组包含字面意思包含“0x1F463”的字符串,对吗?

标签: objective-c macos unicode nsstring emoji


【解决方案1】:

不是我最好的作品,但它似乎有效:

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
    }
}

使用包含四个样本值的数组,我得到了四双赤脚。

【讨论】:

    【解决方案2】:

    你可以这样做:

    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);
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 2021-10-11
      • 2018-10-28
      • 1970-01-01
      • 2014-09-29
      • 2019-04-03
      • 2021-08-07
      • 1970-01-01
      相关资源
      最近更新 更多