检查NSString是否编码

use*_*608 -1 encoding objective-c nsstring ios

如何检测NSString已经编码的内容.

我正在编码我的字符串,如下所示.在编码之前我只想验证天气[product url]是否已编码.

NSString *encodedUrlString=[[product url] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

rma*_*ddy 6

您可以尝试解码字符串,看看原始字符串和解码后的字符串是否相同.如果它们相同则尚未编码.

NSString *original = product.url;
NSString *decoded = [original stringByReplacingPercentEscapesUsingEncoding:NSUTF8Encoding];
if ([original isEqualToString:decoded]) {
    // The URL was not encoded yet
    NSString *encodedUrlString=[[product url] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
} else {
    // The URL was already encoded
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句 - 从iOS 9开始,这些方法已被弃用,因此,如果您的应用的部署目标是iOS 9.0或更高版本,则应使用较新的方法.

对于iOS 9或更高版本,您应该使用:

NSString *original = product.url;
NSString *decoded = [original stringByRemovingPercentEncoding];
if ([original isEqualToString:decoded]) {
    // The URL was not encoded yet
    NSString *encodedUrlString=[[product url] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet alphanumericCharacterSet]];
} else {
    // The URL was already encoded
}
Run Code Online (Sandbox Code Playgroud)