0

将 NSString 转换为 NSURL

这是我的代码,但我收到空结果

NSString *Mystr = [NSString stringWithFormat:@"http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in (\"USDEUR\")&env=store://datatables.org/alltableswithkeys"];




NSURL *URLOne = [[NSURL alloc] initWithString:[Mystr stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];

NSError *error1;
NSString *strresult = [NSString stringWithContentsOfURL:URLOne
                                                encoding:NSASCIIStringEncoding
                                                   error:&error1];


NSLog(@"%@", strresult);

这是我的错误

错误域 = NSCocoaErrorDomain 代码 = 256 “无法打开文件“yql”。UserInfo={ NSURL=http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22USDEUR%22)&env =store://datatables.org/alltableswithkeys }

4

1 回答 1

0

没有特别的顺序:

  • stringWithContentsOfURL方法不适用于获取网络 URL。您应该为此使用NSURLSession API。
  • 您不能像这样任意对 URL 进行 URL 编码。我怀疑你只想编码 q 参数的内容,可能还有 env 参数的内容。您必须分别对它们进行编码,然后将它们连接起来。如果您尝试对整个字符串进行编码,您的 URL 将以 ... 开头http%3A%2F%2F
  • 这不是对 URL 查询字符串数据进行编码的好方法。除其他外,它不会编码一堆在技术上在查询字符串中合法但可能导致错误行为的特殊字符(例如等号和& 符号)。相反,请执行以下操作:

    NSString *qParameterEncoded =
        (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
            kCFAllocatorDefault,
            (__bridge CFStringRef)qParameter,
            NULL,
            CFSTR(":/?#[]@!$&'()*+,;="),
            kCFStringEncodingUTF8);
    

    或使用 and 做等效stringByAddingPercentEncodingWithAllowedCharacters:的 custom NSCharacterSet

于 2016-08-14T05:47:55.127 回答