【问题标题】:Checking if a given character is an emoji in Objective-C在 Objective-C 中检查给定字符是否是表情符号
【发布时间】:2019-06-11 01:27:32
【问题描述】:

我有一个NSString,想检查某个索引处的给定字符是否是表情符号。

但是,似乎没有任何可靠的方法可以创建 NSCharacterSet 的表情符号字符,因为它们会随着 iOS 更新而变化。许多可用的解决方案都依赖于 Swift 功能,例如 UnicodeScalar。所有解决方案似乎都涉及对表情符号的代码点值进行硬编码。

因此,是否可以检查表情符号?

【问题讨论】:

  • 没有提供仅检查表情符号的 API。我还没有尝试过,但请参阅stackoverflow.com/a/14472163/1226963,它使用了一个有趣的解决方案来检测表情符号。它似乎将任何非全黑字符视为表情符号。
  • 我认为这个辅助函数应该可以帮助到你:gist.github.com/cihancimen/4146056.
  • 遗憾的是,要点中的功能似乎并未涵盖所有表情符号。

标签: ios objective-c unicode nsstring emoji


【解决方案1】:

这是一个有点复杂的问题,因为 Unicode 很复杂,但你可以使用NSRegularExpression 来做到这一点:

    NSString *s = @"where's the emoji ? ?";
    NSRegularExpression *r = [NSRegularExpression regularExpressionWithPattern:@"\\p{Emoji_Presentation}" options:0 error:NULL];
    NSRange range = [r rangeOfFirstMatchInString:s options:0 range:NSMakeRange(0, s.length)];
    NSLog(@"location %lu length %lu", (unsigned long)range.location, (unsigned long)range.length);

产生:

2019-01-16 18:07:42.629 emoji[50405:6837084] location 18 length 2

我使用\p{Unicode property name} 模式来匹配具有指定Unicode 属性的字符。我正在使用属性Emoji_Presentation 来获取默认情况下显示为表情符号的那些字符。您应该查看 Unicode® Technical Standard #51 — Annex A: Emoji Properties and Data Files 和 A.1 中链接的数据文件,以确定您真正关心的属性。

【讨论】:

猜你喜欢
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 2020-12-11
  • 2013-12-28
  • 2017-05-15
  • 2011-10-24
  • 1970-01-01
相关资源
最近更新 更多