2011-02-16 174 views
0

我想解析GET請求的JSON響應。當字符,拉丁沒有問題。非拉丁字符的iPhone編碼

但是,當他們不是拉丁文的消息不能正確顯示。我試過希臘語,而不是「πανος」,我得到「& pi; & alpha; & nu; & omicron; & sigmaf;」

我用解析響應的代碼是:

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

NSLog(@"response %@", responseString); 




// array from the JSON string 
NSArray *results = [responseString JSONValue]; 

當我嘗試讀取使用AJAX,一切都很好,一個網站的響應。嘗試使用iphone中的數據嚮應用程序服務器發送GET請求時也是如此。所以當我將數據傳輸到服務器並從網站上讀取時,一切都很好。當我嘗試在應用中顯示相同的數據時,「休斯頓我們遇到了問題」。

任何線索?

編輯:爲了避免誤解,這不是HTML的問題,我只是指出,對於一些readon utf-8字符,這裏編碼正確和自動,例如。 「& pi」將被轉換爲「π」,但是客觀的c似乎不能自己做到這一點

+0

我相信這是網站的問題(而不是ObjC)返回的HTML實體。 – kennytm 2011-02-16 11:54:31

+0

你並沒有說明你正在使用哪個JSON框架,但據我所知,它們都完美支持非羅馬字符。所以你應該查看由服務器提供的http數據或者你的顯示例程。 – 2011-02-16 11:57:10

+0

@KennyTM該網站工作正常,所以我不認爲我們有問題.. – tappy 2011-02-16 12:13:26

回答

0

有一個困惑,我認爲。

πHTML實體這是無關文本編碼像UTF8 /拉丁文。

閱讀wikipedia有關詳細信息...

你需要一個分析器,這些實體像以前多用於的Izzy提到的解碼:

NSString+HTML category and method stringByReplacingHTMLEntities 
0

嘗試使用此代碼片段:

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

    NSString *decodedString = [NSString stringWithUTF8String:[responseString cStringUsingEncoding:[NSString defaultCStringEncoding]]]; 


    NSLog(@"response %@", decodedString); 


    // array from the JSON string 
    NSArray *results = [decodedString JSONValue]; 
0

我都面臨着同樣的問題,但我解決了它通過更改JSON解析器。我已經開始使用SBJSONParser,現在我正在得到相應的結果。這是代碼片段,我已經使用

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
SBJSON *parser=[[SBJSON alloc]init]; 
NSArray *JSONData = (NSArray*)[parser objectWithString:returnString error:nil];