2011-11-15 45 views
6

我正在製作一個應用程序,使用套接字和JSON與nodejs-server進行對話,並且由於iOS 5擁有自己的NSJSONSerialization,我認爲這可能是通向跟隨。之前,我使用輕量級的yail庫。NSJSONSerialization和Unicode,將不會很好地一起玩

無論如何,在遷移到NSJSONSerialization後,我開始遇到問題的編碼,改變之前,字符Ö將很好地發送到服務器和背部,仍然Ö,但現在,NSJSONSerialization葉Ö仍然以Unicode字符即\U00f6

閱讀文檔說默認情況下JSON對象轉換爲UTF8。當我將服務器的響應轉換爲簡單的NSString時,Ö就像預期的那樣顯示,但它仍然在JSON中。

請幫我解釋一下你的想法,我應該回到yail還是使用內置的NSJSONSerialization?

謝謝 西蒙

+0

你能詳細說明你如何確定'NSJSONSerialization'仍然在結果字符串中留下'\ U00f6'嗎?在我的測試中,它正確解碼爲「ö」。你確定你沒有將結果'NSDictionary' /'NSArray'的默認'-description'表示與其實際解碼結果混淆嗎? – wulong

+0

你是什麼意思?做一個簡單的'NSLog(@「%@」,[NSJSONSerialization JSONObjectWithData:data options:0 error:&err]);'輸出帶有已解碼unicode字符串的字典,即'\ U00f6'。 – Simon

+1

NSLog選擇代表該字符是爲了保持日誌清潔而使用逃逸代碼而不是實際字符。 您是否將數據對象直接從網絡庫傳輸到NSJSONSerialization?您可以發佈一些示例代碼嗎? –

回答

3

NSLog調用其參數的描述,它發生的是打印Unicode代碼而不是字符本身。嘗試例如:

NSLog(@"%@", [NSDictionary dictionaryWithObject:@"ö" forKey:@"hello"]); 

你會看到它打印

{ 
    hello = "\U00f6"; 
} 

所以,有機會,你的JSON解碼已經做精。

0

JSONSerialization只能與某些類型的使用:只有默認的NSString,NSNumber的,的NSArray,NSDictionary的,或者NSNull ...如果您需要在您的JSON使用其他對象,我推薦使用https://github.com/johnezang/JSONKit

相關問題