【问题标题】:google translate will special char using objective-c谷歌翻译将使用objective-c特殊字符
【发布时间】:2013-03-01 08:52:18
【问题描述】:

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

我正在尝试使用 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] [[["房子","hus","",""]]

等等。

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

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

现在,只更改具有特殊字符的单词:

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

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

控制台中打印出来的url:

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","进程"]

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

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

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

等等……

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

任何人都对此有所了解或可以指导我解决这个问题?

提前致谢

【问题讨论】:

    标签: objective-c translation google-translate


    【解决方案1】:

    我认为这行是罪魁祸首:

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

    应该是:

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

    当我在 Linux 下的 Chrome 中尝试你的 URL 时,它会下载一个名为 t 的文件并且:

    $ file t
    t: UTF-8 Unicode text, with very long lines, with no line terminators
    

    【讨论】:

    • 感谢您的回答。两者都为第二次调用提供相同的结果。当我在任何浏览器中尝试时,结果总是很好。它是一个具有预期结果(train)的 t.js 文件。来自应用程序的结果不是“正确”或不符合预期。如果你使用 NSUTF8StringEncoding 来翻译单词“hus”,因为返回的是 ASCII,结果是 (null)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2010-11-16
    相关资源
    最近更新 更多