【发布时间】:2010-11-20 12:04:54
【问题描述】:
我想在 Cocoa 应用程序中提交到以下 URL 并将结果保存到字符串(虽然 XML 可能更好):
http://translate.google.com/translate_t#en|fr|hi%20there%20all
页面不断返回错误。这是我的代码:
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]
以上导致URL变成:
http://translate.google.com/translate_t%23en%7Cfr%7Chi%2520there%2520all
这会导致来自 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 *content 行上再次得到零字节。
【问题讨论】:
-
原始 urlString 是什么(在第一行之前?)如果它是您在上面写的,这可能是一个问题,因为它会百分比转义 %20 的百分比符号(实际上是双重转义..)
-
我已经修改了帖子以包含第一行。如果我在不转义的情况下发送 url,则返回零字节。
-
NSString *urlString = @"translate.google.com/translate_t#en|fr|hi%20there%20all";该字符串已经翻译 - 您应该保持原样。 urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];这是破坏它,所以不要这样做。
-
没有编码的url不起作用。它返回零字节。
标签: objective-c cocoa