NSString stringByReplacingPercentEscapesUsingEncoding不起作用

Rom*_*anS 6 objective-c nsstring

我需要从NSString获取url字符串.我做以下事情:

   NSString * str = [NSString stringWithString:@"i@gmail.com"];

    NSString * eStr = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSLog(@"%@",eStr);
Run Code Online (Sandbox Code Playgroud)

结果是i@gmail.com.但我需要i%40gmail.com.用NSASCIIStringEncoding替换NSUTF8StringEncoding没有帮助.

sid*_*yll 12

你使用的是错误的方法.这恰恰相反,将百分比转换为其角色.你可能想用 stringByAddingPercentEscapesUsingEncoding:.

NSString *str  = @"i@gmail.com";
NSString *eStr =
    [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

除此之外@,默认情况下看起来字符不会被转义.然后,正如上述方法的文档所指出的那样,您需要使用CoreFoundation来实现您想要的效果.

NSString *str  = @"i@gmail.com";

CFStringRef eStr = CFURLCreateStringByAddingPercentEscapes(
    kCFAllocatorDefault,
    (CFStringRef)str,
    NULL,
    (CFStringRef)@"@",
    kCFStringEncodingUTF8
);

NSLog(@"%@", eStr);

CFRelease(eStr);
Run Code Online (Sandbox Code Playgroud)

请查看文档以了解有关所用功能以及如何使其符合您需求的更多信息.