【问题标题】:Convert an string to unicode in objective C在目标C中将字符串转换为unicode
【发布时间】:2016-10-09 07:57:51
【问题描述】:

我需要将字符串转换为 unicode (hex) char,我将使用以下代码将 unicode 转换为字符串

[NSString stringWithFormat:@"%C",0x2665];

但我无法完全扭转这一点。

sn-p 的代码是什么

【问题讨论】:

  • 你在下面的评论中提到你需要这个来推送通知。为什么? iOS 应用程序中的推送通知在什么级别需要将字符串转换为单个 Unicode 字符?你应该用你真正想做的事情来更新你的问题,并解释你真正遇到的问题。

标签: ios objective-c unicode hex


【解决方案1】:

这取决于你对角色的定义。鉴于您的示例,我假设 [string characterAtIndex:0] 是您要查找的内容(获取字符串中包含的第一个 unichar 值,对于您在第一个示例中创建的字符串,该值将是 0x2665)。

但是,您会从中得到一个 UTF-16 代码点,它可能是也可能不是完整的逻辑字符,并且可能是也可能不是打印的完整字符。例如,这将无法表示某些表情符号,并且肯定无法表示任何具有特殊肤色或国家标志的表情符号。 (重要的是,它也可能无法表示某些语言的字符。)

【讨论】:

  • 问题是我想发送带有表情符号的推送通知,因为我需要这个。
  • 一直使用NSString。这不是很棒,但至少它不会让你的任务在设计上变得不可能。
  • NSString *str = @"?"; [str characterAtIndex:0] 返回 U+d83d u'' 这个值怎么处理?
  • 你不能使用这个值。它不是有效的 Unicode 字符。它只是一个构成一半表情符号的代码点。你必须使用整个 NSString。
  • 你能帮忙怎么做吗?
【解决方案2】:

感谢objective C。它具有帮助Unicode 到字符串和字符串到Unicode 的编码方法。这是示例。

NSString *str = @"♥";
    NSData *dataenc = [str dataUsingEncoding:NSNonLossyASCIIStringEncoding];
    NSString *encodevalue = [[NSString alloc]initWithData:dataenc encoding:NSUTF8StringEncoding];

    NSData *data = [encodevalue dataUsingEncoding:NSUTF8StringEncoding];
    NSString *decodevalue = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];

    NSLog(@"%@",decodevalue);

【讨论】:

  • 我已经做过这个问题,当它作为通知发送时,它显示的是 unicode char 本身而不是表情符号(在通知横幅上)。因为我们无法在通知中解码该值
  • 您可以在发送推送通知时设置“alert”键,如下所示:{"aps": {"alert": "High Five, bro \ue012"}}。只需附加 Unicode 字符串
【解决方案3】:

自定义 unicode 到表情符号


#define EmojiCodeToSymbol(c) ((((0x808080F0 | (c & 0x3F000) >> 4) | (c & 0xFC0) << 10) | (c & 0x1C0000) << 18) | (c & 0x3F) << 24)

/// convert hexadecimal to unicode
/// NSString *v = omgEmojiConvertCode(@"0x1F580");
/// v is ? (cannot be displayed), 

static inline NSString *omgEmojiConvertCode(NSString * code) {
    char *charCode = (char *)code.UTF8String;
    long intCode = strtol(charCode, NULL, 16);
    NSString *s = [NSString stringWithFormat:@"%ld",intCode];

    int symbol = EmojiCodeToSymbol([s intValue]);
    NSString *string = [[NSString alloc] initWithBytes:&symbol length:sizeof(symbol) encoding:NSUTF8StringEncoding];
    return string;
}

无法显示的是

现在您可以将其替换为 imageName

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多