从Google的翻译API获取响应时编码错误?

时间:2009-08-04 01:02:03

标签: iphone internationalization

我正在使用谷歌的翻译API来翻译iPhone SDK中的一些文字。我使用的网址是http://ajax.googleapis.com/ajax/services/language/translate?v=1.0

一切正常,除了在某些语言中,例如波兰语,返回的字符串有时会像字符串一样有奇怪的东西。它会显示为“你好,你怎么样”。为什么是这样?我获取结果的方式如下:

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

编码是否错误?这就是新字符串看起来不正确的原因吗?我在谷歌翻译网页上尝试了相同的文字,它被正确翻译。


更新

如果您只是转到此URL,您会看到特殊字符。如何在我的应用中正确表示这些字符?使用上面两行代码将无法正确编码。

3 个答案:

答案 0 :(得分: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解析器处理。

答案 1 :(得分:0)

有趣的是,Unicode字符代码0026恰好是&符号,它也是URL请求中的参数分隔符。这让我想知道“req”字符串是否没有发生什么事情而不是编码。

可能想看看对此问题Iphone SDk : Problem with ampersand in the URL string的回复,看看它是否适用于您的情况。

答案 2 :(得分: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"];