我想在Cocoa应用程序中提交以下URL并将结果保存为字符串(尽管XML可能更好):
http://translate.google.com/translate_t#en|fr|hi%20there%20all
Run Code Online (Sandbox Code Playgroud)
该页面不断返回错误.这是我的代码:
NSString *urlString = @"http://translate.google.com/translate_t#en|fr|hi%20there%20all";
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10];
NSData *urlData;
NSURLResponse *response;
NSError *error;
urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
NSString *content = [[NSString alloc] initWithBytes:[urlData bytes]
Run Code Online (Sandbox Code Playgroud)
以上导致URL变为:
http://translate.google.com/translate_t%23en%7Cfr%7Chi%2520there%2520all
Run Code Online (Sandbox Code Playgroud)
这导致了来自Google的404.如果我在没有转义的情况下尝试URL,我会返回零字节.关于如何使这项工作的任何想法?
---编辑---
问题的根源是url的值为nil.删除EscapesUsingEncoding行(第2行)并检查url的值.我在URL中的管道导致[NSURL URLWithString:urlString]; 返回零.使用十六进制值转义管道7C(http://translate.google.com/translate_t#en%7cfr%7chi%20there%20all)返回数据.但是我在NSString*内容行上再次获得零字节.
问题是你正在逃避#Transding,这是谷歌翻译所需要的,以弄清楚发生了什么.事实上,鉴于您传递的URL包含%20(空格),那么您根本不需要URL转义码 - 您可以按原样使用您的文字.
如果您是从NSTextField或类似文件构建它,只需在textValue上运行URL转义,然后再添加前缀.
| 归档时间: |
|
| 查看次数: |
794 次 |
| 最近记录: |