从网络上复制粘贴文本后,在我的mac应用程序NSTextArea中,我看到了
EE
如果我在浏览器中复制这两个字母,我会看到:
E?E
如果我在google翻译中复制它们,我会
E 'E
我无法在两个E之间识别出这个角色。但问题是:如何从我的NSString中删除这些隐藏的角色?
答案 0 :(得分:5)
在上传的文件中,隐藏字符的特定十六进制代码为0x18
(通过Hex Fiend发现)
此角色以及其他角色是“control character集”的一部分。该集还包含选项卡(0x09)和换行符(0x0A)等字符 - 显然我们不想删除它们。
在Objective-C中,我们可以将NSCharacterSet controlCharacterSet 与 whitespaceAndNewlineCharacterSet 结合使用,以获得没有渲染宽度的空白字符。
NSMutableCharacterSet* zeroWidthCharacterSet = [[NSCharacterSet controlCharacterSet] mutableCopy];
[zeroWidthCharacterSet formIntersectionWithCharacterSet:[[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet]];
然后我们可以简单地使用旧的分裂字符集方法
string = [[string componentsSeparatedByCharactersInSet:zeroWidthCharacterSet] componentsJoinedByString:@""];
请注意,如果使用多个UTF8字符表示自身的特殊字符(如表情符号)使用0x18,则剥离它会破坏字符组合
因为控制字符是特殊的,我不相信你会在表情符号序列中找到它们。