Objective c NSString为空,长度为1?

Objective c NSString为空,长度为1?,objective-c,nsstring,string,string-length,Objective C,Nsstring,String,String Length,我遇到了一个非常奇怪的行为: NSLog(@"substring: '%@'\t- length: %d",substring,substring.length); 返回 substring: '‍' - length: 1 substring变量是NSString对象 有人能解释一下发生了什么事吗 编辑::已解决 正如艾米回答的那样: 它正在打印一个看不见的字符 ‍ 零宽度JOINER Unicode:U+200D,UTF-8:E2 80 8D 谢谢菲利普的提示。看不见的空间呢?您应该检

我遇到了一个非常奇怪的行为:

NSLog(@"substring: '%@'\t- length: %d",substring,substring.length);
返回

substring: '‍'  - length: 1
substring变量是NSString对象

有人能解释一下发生了什么事吗

编辑::已解决

正如艾米回答的那样:


它正在打印一个看不见的字符 ‍

零宽度JOINER Unicode:U+200D,UTF-8:E2 80 8D


谢谢菲利普的提示。

看不见的空间呢?您应该检查子字符串中是否有U+200B符号,或者查看此处

不可见空间如何?您应该检查子字符串中是否有U+200B符号,或者查看此处

可能是某种空白。如果要忽略空白,可以尝试:

string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

可能是某种空白。如果要忽略空白,可以尝试:

string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

它正在打印一个看不见的字符

‍ 零宽度细木工
Unicode:U+200D,UTF-8:E2 80 8D

它正在打印一个不可见字符:

‍ 零宽度细木工
Unicode:U+200D,UTF-8:e280 8D

我不得不使用以下方法进行修剪,以去除一些额外的不可见项

[[NSCharacterSet alphanumericCharacterSet] invertedSet]

我不得不用下面的方法修剪,以去除一些额外的隐形眼镜

[[NSCharacterSet alphanumericCharacterSet] invertedSet]

子字符串中有什么?它可能是零宽度字符吗?(例如)如果使用
NSLog(@“字符值:%d”,[substring characterAtIndex:0]),会发生什么情况
?实际上,如果数组的长度为0,它将返回
(nil)
,而不是
'
子字符串中有什么?它可能是零宽度字符吗?(例如)如果使用
NSLog(@“字符值:%d”,[substring characterAtIndex:0]),会发生什么情况?事实上,如果数组长度为0,它将返回
(nil)
,而不是
'
。感谢您的建议,但我在发布问题之前尝试过这个,但没有帮助。感谢您的建议,但我在发布问题之前尝试过这个,没有帮助。