2009-08-04 3 views
1

Googleの翻訳APIを使用して、iPhone SDKのテキストを翻訳しています。私が使用しているURLはhttp://ajax.googleapis.com/ajax/services/language/translate?v=1.0Googleの翻訳APIからの応答を取得する際にエンコードが間違っていますか?

です。いくつかの言語を除いてすべて機能します。たとえばポーランド語の場合、返される文字列には文字列の一部として\ u0026のような奇妙なものがあることがあります。それは "こんにちはどのようにあなた\ u0026e"として表示されます。どうしてこれなの?結果を取得する方法は次のとおりです。

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

エンコードが正しくありませんか?新しい文字列が間違っているように見えますか?私は同じテキストを試してみましたint彼はGoogle翻訳ウェブページとそれは正しく翻訳されます。


UPDATE

あなたは、単にこのURLに行く場合は、特殊文字が表示されます。私のアプリでそれらの文字を正しく表現するにはどうすればいいですか?上の2行のコードを使用すると、正しくエンコードされません。

答えて

3

例は正しいよう:..."liberation" and "exit application"...、その後、あなただけのhtmlデコーダを通じてそれを渡す必要があります:

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

私が推測することは、適切なJSONライブラリを持っている場合は、translatedTextがあるべきjsonEncode(htmlEncode("liberation" and "exit application"))

です。

\uXXXXエスケープは単なる16進数のエスケープであり、jsonパーサーが処理する必要があります。

0

面白いことに、Unicodeのchar-codes 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"]; 
関連する問題