为什么要使用stringByAddingPercentEscapesUsingEncoding?

时间:2015-06-30 06:31:08

标签: ios url nsstring

我是iOS编程新手。我只是想知道

的实际例子
var error: NSError?

let filesInDirectory: [String]! = fileManager.contentsOfDirectoryAtPath(tmpDir, error: &error) as? [String]

即为什么以及何时使用?

2 个答案:

答案 0 :(得分:2)

使用URL时,

stringByAddingPercentEscapesUsingEncoding:非常有用。它返回一个百分比转义字符串,它是一个合法的URL字符串。

它将转换" http://www.example.com/resources?name=hello世界"到" http://www.example.com/resources?name=hello%20world"

以下是有关网址http://www.w3schools.com/tags/ref_urlencode.asp

的详细信息

注意:在iOS 9中不推荐使用此方法。如果要使用UTF-8编码,可能还需要使用此方法stringByAddingPercentEncodingWithAllowedCharacters:

我添加了代码,以便在没有编码的情况下将url发送到服务器时显示错误。

NSString *urlString = @"http://localhost/test/test.php?name=hello world";

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:[NSURL URLWithString:urlString]
        completionHandler:^(NSData *data,
                NSURLResponse *response,
                NSError *error) {
            if (error) {
                NSLog(@"%@", error);
            } else {
                NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@",newStr);
            }
        }] resume];

此代码返回

Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo=0x7f92f17989d0 {NSLocalizedDescription=unsupported URL, NSUnderlyingError=0x7f92f141b1f0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1002.)"}

所以,修复错误。我们只需要像这样编码urlString

[NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]

答案 1 :(得分:1)

stringByAddingPercentEscapesUsingEncoding会将Unicode *字符转换为转义百分比格式。

stringByReplacingPercentEscapesUsingEncoding将执行相反的操作,将百分比转义转换为Unicode *。

*实际上不是Unicode,而是您选择的编码。

This is a good example that you are looking for