2009-08-04 67 views
1

我使用谷歌的翻譯API來翻譯iPhone SDK中的一些文本。我使用的網址是http://ajax.googleapis.com/ajax/services/language/translate?v=1.0從Google的翻譯API獲取響應時錯誤的編碼?

一切正常,除了在某些語言中,例如波蘭語,返回的字符串有時會有奇怪的東西,例如\ u0026作爲字符串的一部分。它會顯示爲「你好嗎」。爲什麼是這樣?我得到結果的方式如下:

NSData *returnData = [NSURLConnection sendSynchronousRequest: req returningResponse: response error: error]; 
    NSString *new = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding]; 

編碼是否不正確?這就是爲什麼新字符串看起來不正確?我已經嘗試了相同的文字,他谷歌翻譯網頁,並得到正確的翻譯。


UPDATE

如果你只是去這個URL,你會看到特殊字符。我如何在應用程序中正確表示這些字符?使用上面的兩行代碼不能正確編碼。

回答

3

的例子看起來是正確的:

\u0026quot;liberation\u0026quot; and \u0026quot;exit application\u0026quot; 

我猜是jsonEncode(htmlEncode("liberation" and "exit application"))

如果你有一個正確的JSON庫,然後translatedText應該是:..."liberation" and "exit application"...,然後你只需要傳遞,通過一個html解碼器。

\uXXXX轉義符只是unicode十六進制轉義符,應該由json解析器處理。

0

有趣的是,Unicode字符代碼0026碰巧是和號字符,它也是URL請求中的參數分隔符。這讓我想知道「req」字符串是否沒有進行任何操作,而不是編碼。

可能想看看對這個SO問題的回答Iphone SDk : Problem with ampersand in the URL string,看看它是否適用於您的情況。

0

響應是一個JSON字符串(閱讀JSON here)。嘗試在結果字符串上使用JSON解析器,然後從中檢索「responseData」元素。例如,使用this framework,您的代碼將如下所示:

// Your original code 
NSData *returnData = [NSURLConnection sendSynchronousRequest: req returningResponse: response error: error]; 
NSString *jsonResponse = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding]; 
// JSON parsing 
SBJsonParser *parser = [SBJsonParser new]; 
id jsonObject = [parser objectWithString:jsonResponse]; 
// the result supports key-value coding 
NSString* translatedValue = [jsonObject valueForKey:@"responseData"];