为什么Cocoa不喜欢这个URL?

4th*_*ace 1 cocoa objective-c

我想在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*内容行上再次获得零字节.

AlB*_*lue 6

问题是你正在逃避#Transding,这是谷歌翻译所需要的,以弄清楚发生了什么.事实上,鉴于您传递的URL包含%20(空格),那么您根本不需要URL转义码 - 您可以按原样使用您的文字.

如果您是从NSTextField或类似文件构建它,只需在textValue上运行URL转义,然后再添加前缀.