【问题标题】:Why doesn't Cocoa like this URL?为什么 Cocoa 不喜欢这个 URL?
【发布时间】: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


【解决方案1】:

问题是您正在转义 # 字符,Google 翻译需要它来弄清楚发生了什么。事实上,鉴于您传递的 URL 包含 %20(空格),那么您实际上根本不需要 URL 转义码 - 您可以按原样使用您的文字。

如果您是从 NSTextField 或类似内容构建它,只需在 textValue 上运行 URL 转义,然后再添加前缀即可。

【讨论】:

【解决方案2】:

您似乎在双重转义百分号(请注意,如果您将最终字符串带入 Safari,它也不会加载,给出 404)。

这会导致 %20 变为 %2520(%25 是 % 符号)。此外,根本不转义并不会转义 # 和 |迹象。

您的原始字符串应该是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多