过滤NSString中的Emoji

有时候由于项目需求。要过滤NSString中的emoji。
比方下面情况:

  • 要跟android互通,android假设还没做这方面的支持。
  • 内容做为手机短信发出去。

思路例如以下,遍历NSString每个字符,然后替换成其他字符。打印每个字符:

NSRange range;
    for(NSInteger i = 0; i < length; i += range.length) {
        range = [string rangeOfComposedCharacterSequenceAtIndex:i];
        NSString *composedString = [string substringWithRange:range];
        NSLog(@"i = %@, ch = %@", @(i), composedString);
    }`

怎样推断composedString是emoji呢?

  • 方法1:查找其在emoji字典里。这种方法要载入全面的emoji,不是非常理想。
  • 方法2:是不是正常能显示的字符,就是它是非emoji。

推断当前码点是不是emoji.

- (BOOL)isNotEmoji:(UInt64) codePoint {
    return (codePoint == 0x0)
    || (codePoint == 0x9)
    || (codePoint == 0xA)
    || (codePoint == 0xD)
    || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
    || ((codePoint >= 0xFF00) && (codePoint <=
                                  0xFFFF));
}

依据以上两个方法,我写了一个NSString的扩展类:
NSString+YFEmoji

本文原创。转载请注明。

原文地址:https://www.cnblogs.com/yangykaifa/p/7260169.html