ObjC:如何从半表情符号中检测和删除无效字符?

ObjC: how to detect and remove invalid character from half emoji?

我得到一个字符串,其中一部分是表情符号 \xF0\x9F\x98\x8FNSString length 将其计为两个字符,问题是我有时需要通过调用 [= 来限制字符串的长度=12=],如果索引恰好在表情符号的中间,我得到半个表情符号,这是一个无效字符,当我打印它时,它作为字符串的一部分不可见,但是 length字符串包含该部分。

有没有办法摆脱这个字符串?

谢谢!

尝试rangeOfComposedCharacterSequencesForRange:。这将增加输入范围以包含表情符号的第二个代理项,或者包含所有尾随组合字符(如果有的话)。

因为这不是您想要的,您应该检测范围何时扩大并使用较小的最大长度重试。

假设您希望输出字符串中最多十个字符:

NSString *input = ... string possibly containing emoji ...;
NSUInteger maxLength = 10;
maxLength = MIN(maxLength, input.length);
while (maxLength > 0) {
    NSRange range = NSMakeRange(0, maxLength);
    range = [input rangeOfComposedCharacterSequencesForRange:range];
    if (range.length > maxLength) {
        --maxLength;
    } else {
        break;
    }
}
NSString *output = [input substringToIndex:maxLength];
NSLog(@"output = %@", output);