2013-02-22 80 views
0

我想使用來自JSON文件的在線數據。它目前正在工作,但是當我使用特殊字符時,它顯示「null」。下面是我使用的代碼:NSJSONSerialization:正確對待特殊字符

NSString *urlString = [NSString stringWithFormat:@"http://belesios.com/burc/koc2.php"]; 
NSURL *url = [NSURL URLWithString:urlString]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
NSError *error; 
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
NSLog(@"%@", json); 
NSString *ciktiText = [[NSString alloc] initWithFormat:@"%@", json]; 
[kocLabel setText:ciktiText]; 

例如,如果我的文件包含C或U,則返回null。我需要做什麼?

+0

的第一件事是打印錯誤。 - 服務器是否以UTF-8發送JSON數據? – 2013-02-22 18:10:14

+0

不,第一件事是用正確的英文寫作,而不是濫用標籤。發佈錯誤消息會有幫助,但這只是第二件事。 – 2013-02-22 18:13:54

+2

如果字符代碼使其成爲NSString而沒有「損壞」,那麼任何適當的JSON序列化器/解析器都應該處理它。然而,數據傳輸中的數據不會被破壞是至關重要的。你需要給我們一個更具體的例子,說明你相信你正在接受什麼,以及你認爲它正在被翻譯成開始調試。 – 2013-02-22 18:46:24

回答

4

試試這個方法找到了當數據從服務器提取使用何種編碼:

NSStringEncoding encoding; 
NSString *jsonString =[NSString stringWithContentsOfURL:URL usedEncoding:&encoding error:&error]; 
if (error) 
    NSLog(@"Error: %@", error); 

您應該檢查服務器返回的數據進行編碼。你的代碼是正確的,但你應該添加一些檢查,如果錯誤!=零,那麼不要執行並顯示或記錄它。

NSString *jsonString = @"{\"abc\":\"ç or ü\"}"; 
NSDictionary *jsonObj = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&error]; 
NSLog(@"Output: %@", jsonObj); 

輸出:{ABC = 「\ U00e7或\ U00fc」; }如果您使用Fiddler或某些其他軟件來打印原始響應,那麼您的服務器響應應該與編碼字符類似。

目前您的數據看起來像在那裏爲UTF8編碼字符應該像\ U00e7你應該做= C enter image description here

+0

爲什麼這應該更好?您的代碼將服務器響應轉換爲NSString,然後返回到NSData,直接使用'dataWithContentsOfURL'沒有區別。 – 2013-02-22 19:45:18

+0

@MartinR默認編碼是NSASCIIEncoding,但要在問題一中提到特殊字符需要UTF8,如果我沒有錯,沒有直接的方法來加載特定編碼的數據。如果我錯了,請糾正我。 – SAPLogix 2013-02-22 19:53:03

+3

'dataWithContentsOfURL'加載沒有任何轉換的服務器響應。您的代碼將服務器響應(解釋爲UTF-8)轉換爲NSString並返回到NSData。如果服務器發送UTF-8,結果沒有區別。如果服務器不發送UTF-8,您的代碼將不會將其轉換爲UTF-8。 – 2013-02-22 19:57:37