我在做使用像NSString
和NSData
高層可可的功能,而不是向下挖掘至C級之類的東西上的char
小號陣列工作的一些字符串操作的中間。「的NSString stringWithUTF8String:」過於敏感
對於它的愛,+[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:]有時返回一個五臟俱全nil
UTF8-串?
在'-UTF8String'和'-stringWithUTF8String:'之間是否有任何機會autorelease池被耗盡? – 2011-06-07 09:40:16
@Bavarious:不,緩衝區在'stringWithUTF8String:'被調用的時候仍然活着。 – 2011-06-07 09:49:10
你能發佈產生該緩衝區的原始UTF-8字符串嗎?可能首先通過'-dataUsingEncoding:'來表示'NSData'表示,然後是'-UTF8String'之後的緩衝區。 – 2011-06-07 09:54:30