Objective c 为什么';你不喜欢这个网址吗?

Objective c 为什么';你不喜欢这个网址吗?,objective-c,cocoa,Objective C,Cocoa,我想在Cocoa应用程序中提交以下URL,并将结果保存为字符串(尽管XML可能更好): 页面不断返回错误。这是我的密码: NSString *urlString = @"http://translate.google.com/translate_t#en|fr|hi%20there%20all"; urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url =

我想在Cocoa应用程序中提交以下URL,并将结果保存为字符串(尽管XML可能更好):

页面不断返回错误。这是我的密码:

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的值为零。删除转义符usingencoding行(第2行)并检查url的值。我知道URL中的管道正在导致 [NSURL URLWithString:urlString];
返回零。使用十六进制值7C()转义管道将返回数据。但是我在NSString*内容行上又得到了零字节

问题在于您正在转义#字符,Google Translate需要这个字符来找出发生了什么。事实上,如果您传递的URL包含%20(空格),那么您实际上根本不需要URL转义码——您可以按原样使用文本


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

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


如果您是从NSTextField或类似的字段构造它,只需在textValue上运行URL转义,然后再在其上添加前缀。

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

这将导致%20变为%2520(25是%符号)。此外,根本不逃跑也逃不掉#和|标志

您的原始字符串应为:

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

您似乎在双重转义百分比符号(请注意,如果您将最后一个字符串带到Safari中,它也不会加载,这将导致404)

这将导致%20变为%2520(25是%符号)。此外,根本不逃跑也逃不掉#和|标志

您的原始字符串应为:

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

原始的urlString是什么(在第一行之前?)如果它是你上面写的,那可能是一个问题,因为它将百分比转义为%20的百分号(实际上是双重转义…),我已经修改了帖子以包含第一行。如果不转义发送url,则返回的字节数为零。NSString*urlString=@;此字符串已翻译-您应该保持原样。urlString=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];这会破坏它,所以不要这样做。没有编码的url不起作用。它返回零字节。原始的urlString是什么(在第一行之前?)如果它是你上面写的,那可能是个问题,因为它将百分比转义%20的百分号(实际上是双重转义…)我已经修改了帖子,将第一行包括在内。如果不转义发送url,则返回的字节数为零。NSString*urlString=@;此字符串已翻译-您应该保持原样。urlString=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];这会破坏它,所以不要这样做。没有编码的url不起作用。它返回零字节。如果我尝试“全在那里”,那就不起作用,因为英镑被转义了。如果我尝试“”,则返回零字节。所以,文字不能使用。我已经修改了原来的帖子。url变量为nil,因此为零字节,但不确定原因。如果我尝试“there all”,则不起作用,因为英镑已转义。如果我尝试“”,则返回零字节。所以,文字不能使用。我已经修改了原来的帖子。url变量为nil,因此为零字节,但不确定原因。