ObjC:如何从半表情符号中检测和删除无效字符?
ObjC: how to detect and remove invalid character from half emoji?
我得到一个字符串,其中一部分是表情符号 \xF0\x9F\x98\x8F
,NSString 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);
我得到一个字符串,其中一部分是表情符号 \xF0\x9F\x98\x8F
,NSString 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);