2012-03-09 52 views
1

我試圖得到一些數據,包含來自iOS的UTF-8字符,結束了失敗:(UTF8數據不能保存爲NSString的正確

  1. JSON數據來自Rails應用程序。

    render :json => @users

    片斷如下所示: {"likes_num":554,"name":"\u62c9\u7f8e\u4eb2\u5386\u8bb0\u00a0","remote_id":63573783,"remote_identifier":"douban"}

  2. 使用這兩種NSJSONSerialization一nd SBJson失敗。看起來utf-8字符串被修改爲name = "\U62c9\U7f8e\U4eb2\U5386\U8bb0\U00a0";(使用NSLog(@"%@", json))。

  3. NSLog(@"%@", [json objectForKey:@"name"])只是沒有返回,不留下任何日誌。
  4. 將名稱保存爲NSString *nameNSLog保持不變,但在調試時打印說明name,utf-8語句完美顯示。
  5. 試過[name description],什麼都沒有。

請給我一些提示,弄清楚我的utf-8句子真的發生了什麼。 謝謝先進。

UPDATE:其他的項值正常工作,即[json objectForKey:@"remote_identifier"]給人douban,只有@"name"下來沒有理由。

戴夫

回答

1

從我的一個同事的幫助下,我得到了這個最後。這是如何:

其實,有一些我沒有在問題中提到name的值有時可以是nullnil。並且對於這種類型的值,該字段的類型被設置爲與KFNull相關的內容,並且對於不響應該方法的NSNull發送isEqualToString:數據的每個訪問都有風險。

我還是不明白爲什麼NSLog未能打印出非空數據。但我已經有了解決問題的辦法。

NSString *name = [json objectForKey:@"name"]; 
if ((CFNull)name == kCFNull) 
    name = nil; 
myLabel.text = name; 

令人驚訝的是與編碼沒有關係:/

1

我覺得你得到通過一些網絡請求(Web腳本)這個數據(你提到,你是從軌得到這個數據APP)。在我看來

你應該看看這個。

//before below line of code suppose you have done everything like ,you have creating request just encode data using `NSUTF8StringEncoding` 


NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

我想告訴一些有關NSUTF8StringEncoding:- 您可以選擇使用其中encoding可以NSData的字節被解釋爲一個有效的字符串告訴NSString。但是,它不會在編碼之間修改/轉換您的字符串。如果NSData對象包含一個無效的字節序列UTF-8,它將簡單地返回nil。

//then follow further steps as you were .....!!!! 
//like try to parse coming response data 
+0

你的意思是,如果數據不是一個合法的UTF-8字節序列,該jsonString將是零?在我的情況下,可以正確地從數據中提取jsonString。 – 2012-03-09 21:29:56

0

你是從數據庫中得到這個嗎?如果是這樣,它可能只是你的數據庫不會以UTF8格式輸出。我有這個問題很長一段時間。

我個人比你嘗試過的兩個人更喜歡TouchJSON。

您可能會嘗試RestKit,它完全支持獲取JSON並解析它。它似乎更適合你的嘗試。

如果您的回覆是JSON,只需在RestKit的響應對象上使用「parsedBody:」方法,並將其轉換爲NSDictionary。

https://github.com/RestKit/RestKit

希望它能幫助:)

+0

感謝您的回答,我一直在爲我的項目大量使用網絡連接,並且此網絡庫支持幾個JSON庫,不包括 – 2012-03-09 21:01:52

+0

您提到的兩個:(但我會嘗試的,而服務器端現在構建在SQLite數據庫上, – 2012-03-09 21:05:50

+0

我只是試着在'utf8-unicode-ci'中設置一個mysql數據庫,不幸的是我仍然像以前一樣失敗。 – 2012-03-09 21:32:07

相關問題