代码之家  ›  专栏  ›  技术社区  ›  4thSpace wkw

可可为什么不喜欢这个网址?

  •  1
  • 4thSpace wkw  · 技术社区  · 15 年前

    我想在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
    

    这导致了404来自谷歌。如果我尝试不进行转义的URL,则返回零字节。有什么关于如何使这个工作的想法吗?

    ---编辑---

    问题的根源在于url的值为零。删除escapesingencoding行(第2行)并检查url的值。我在URL中的管道导致 [nsurl urlwithstring:urlsting]; 返回零。用六角值7c逃离管道( http://translate.google.com/translate_t#en%7cfr%7chi%20there%20all )返回数据。但是我在nsstring*内容行上又得到了零字节。

    2 回复  |  直到 15 年前
        1
  •  6
  •   AlBlue RACGAMERUP    15 年前

    问题是你在逃避这个角色,谷歌翻译需要这个角色来弄清楚到底发生了什么。事实上,假设您传递的URL包含了%20(空格),那么实际上根本不需要URL转义代码-您可以按原样使用文本。

    如果您是从nstextfield或类似文件构造它,只需在添加前缀之前在textValue上运行url转义。

        2
  •  1
  •   Aviad Ben Dov    15 年前

    您似乎要对百分号进行双重转义(请注意,如果您将最后一个字符串放入Safari,它也不会加载,给出404)。

    这将导致%20变为%2520(%25是%符号)。而且,根本不逃跑也不能逃脱和标志。

    您的原始字符串应该是:

    http://translate.google.com/translate_t#en|fr|hi there all