Objective - C stringByAddingPercentEncodingWithAllowedCharacters不起作用

use*_*331 5 objective-c ios

我有一个像ANC和SHO.pdf这样的网址

当我像这样编码URL时:

NSString *escapedString = [PDFPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

现在,当我使用这个URL它不起作用,我感觉它与&有关,因为当我尝试另一个文件时,它完美地工作,我能够加载PDF,但文件与&我不是.

我究竟做错了什么?

这是escapedString的输出

escapedString   __NSCFString *  @"Ancaster%5CANC%20&%20SHO%20-%20Laundry%20Closets%20to%20be%20Checked.pdf" 0x16ea33c0
Run Code Online (Sandbox Code Playgroud)

然后我用它来调用一个方法:

NSArray *byteArray = [dataSource.areaData GetPDFFileData:[NSString stringWithFormat:@"%@",escapedString]];
Run Code Online (Sandbox Code Playgroud)

这是方法:

-(NSArray *)GetPDFFileData:(NSString *)PDFFile
{
    NSString *FileBrowserRequestString = [NSString stringWithFormat:@"%@?PDFFile=%@",kIP,PDFFile];
    NSURL *JSONURL = [NSURL URLWithString:FileBrowserRequestString];
    NSURLResponse* response = nil;
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:JSONURL];
    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    if(data == nil)
        return nil;
    NSError *myError;
    NSArray *tableArray = [[NSArray alloc]initWithArray:[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&myError]];
    return tableArray;
}
Run Code Online (Sandbox Code Playgroud)

Hon*_*uan 11

[NSCharacterSet URLHostAllowedCharacterSet] 包含以下字符:

!$&'()*+,-.0123456789:;=ABCDEFGHIJKLMNOPQRSTUVWXYZ[]_abcdefghijklmnopqrstuvwxyz~
Run Code Online (Sandbox Code Playgroud)

其中包含' &',所以

NSString *escapedString = [PDFPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

不会为你逃脱'&',那么它不是URLEncoded.

看到问题如何编码的URL字符串.