2

让我开始说我做了一些功课,但我没有找到任何问题的答案。

我正在尝试使用 translate.google.com/translate_a 网址将单个单词从瑞典语翻译成英语。我在objective-c中这样做。

这是一个例子:

word = @"hus"; // result should be "house"

urlPath = [NSString stringWithFormat:@"/translate_a/t?client=t&text=%@&langpair=sv|en", word];
url = [[NSURL alloc] initWithScheme:@"http" host:@"translate.google.com" path:urlPath];
NSLog(@"%@\n\n", url);
request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"GET"];
myData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
result = [[NSString alloc] initWithData:myData encoding: NSASCIIStringEncoding];
NSLog(@"%@\n\n", result);
self.viewController.textViewGood.text = result;

NSLog 给了我这个网址:
http ://translate.google.com/translate_a/t?client=t&text=hus&langpair=sv%7Cen

NSLog 也显示了正确的结果:

2013-03-01 00:07:14.681 testGoogTrans[941:11303] [[["house","hus","",""]]

ETC..

如果我现在在浏览器中调用之前显示的 url,我会得到一个内部具有相同结果的文件。

所以这在应用程序和浏览器上都可以正常工作。

现在,通过仅更改具有特殊字符的单词:

word = @"tåg"; // result should be "train"

其余的保持不变,我得到了一个奇怪的不同结果:

控制台中的打印网址:

http://translate.google.com/translate_a/t?client=t&text=t%C3%A5g&langpair=sv%7Cen似乎已正确转义。

如果我在浏览器中调用这个 url,我会得到一个包含以下内容的文件:

[[["trains","tåg","",""]],[["nom",["TRAIN","MARCH","ROPE","MARCHING","EXPEDITION","PROCESSION"]

等等......这是我所期望的。

相反,在应用程序中,控制台中显示的结果是:

[[["t\u00C3 \u00A5 g","t\u00C3\u00A5g","",""]],,"sv",,[["t\u00C3",[5],1,0,998, 0,1,0]

ETC...

我相信网址格式正确,我不知道为什么我从应用程序中得到不同的答案。

任何人都对此有所了解,或者可以让我找到解决这个问题的方向吗?

提前致谢

4

1 回答 1

0

我认为这条线是罪魁祸首:

result = [[NSString alloc] initWithData:myData encoding: NSASCIIStringEncoding];

应该是:

result = [[NSString alloc] initWithData:myData encoding: NSUTF8StringEncoding];

当我在 Linux 下的 Chrome 中尝试您的 URL 时,它会下载一个名为tand 的文件:

$ file t
t: UTF-8 Unicode text, with very long lines, with no line terminators
于 2013-03-01T08:57:33.113 回答