2013-02-26 68 views
2

以下是我的代碼的NSString返回NULL,而這樣做NSUTF8StringEncoding

NSString *res = [valueArray valueForKey:@"key"]; 
NSData *newdata=[res dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 
res=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding]; 
nameTxt.text = [NSString stringWithFormat:@"%@",res]; // Assigning to textfield 

這個工作正常。 但有時候它會返回NULL數據,大多數情況下它會在字符串內容大的數據時發生。

任何人都知道爲什麼會發生這種情況?

+0

Xcode返回'NULL'?它是如何做到的?除了從字符串 - >數據 - >字符串看起來毫無意義的轉換之外,這段代碼應該做些什麼? – trojanfoe 2013-02-26 10:15:45

+1

在Textfield中它有時顯示(null)值,我不知道爲什麼。如果你知道,那麼讓我知道@trojanfoe。 – 2013-02-26 10:20:26

+0

如果你做'nameTxt.text = [valueArray valueForKey:@「key」];'? – trojanfoe 2013-02-26 10:22:10

回答

2
NSString *res = [valueArray valueForKey:@"key"]; 

這很有趣:在使用上一個名爲...Array變量valueForKey:。而似乎是一本字典?

NSData *newdata = [res dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

創建一個字符串的原始UTF8編碼的數據總是工作:無需allowLossyConversion

res = [[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding]; 

的utf-8編碼的原始數據轉換成ASCII如果UTF8不包含任何字符出了非常有限的ASCII範圍的不只是工作。否則返回nil

這似乎是只有這個混淆代碼的原因:過濾掉非ASCII字符串。否則,轉換並沒有絲毫意義。

+0

更有可能:代碼從某處被複制而沒有任何理解。 – gnasher729 2016-03-11 10:34:17

+0

只是巧合,我發現一個帖子,有人做了這個胡說,以明確的目的正確地處理表情符號。這當然完全沒有意義。 – gnasher729 2016-03-11 10:37:50