我正在使用高级Cocoa功能进行字符串操作,例如
有时候,
NSString
和NSData
,而不是深入到C级别的东西,例如处理char
数组。有时候,
+[NSString stringWithUTF8String:]
会返回nil
,即使最初使用-[NSString UTF8String]
创建的字符串完全正常。人们会认为这种情况发生在输入格式错误时。以下是一个失败的示例输入(十六进制):55 6B 66 51 35 59 4A 5C 6A 60 40 33 5F 45 58 60 9D 47 3F 6E 5E
60 59 34 58 68 41 4B 61 4E 3F 41 46 00
和ASCII:
UkfQ5YJ\j`@3_EX`G?n^`Y4XhAKaN?AF
这是一个随机生成的字符串,用于测试我的子程序。
char * buffer = [randomNSString UTF8String];
// .... doing things .... in the end, buffer is the same as before
NSString * result = [NSString stringWithUTF8String:buffer];
// yields nil
编辑:以防有人没有理解隐含的问题,在-v模式下,问题如下:
为什么[NSString stringWithUTF8String:]有时会在一个完全形式的UTF8字符串上返回nil
?
-UTF8String
和-stringWithUTF8String:
之间,自动释放池是否有可能被清空? - user557219stringWithUTF8String:
时,buffer
仍然是存在且有效的。 - Joe Völkerresult=[NSString stringWithUTF8String:[randomNSString UTF8String]]
,你会得到一个有效的结果吗? - walkytalkyrandomNSString
是如何创建的? - Peter Hosey