【问题标题】:Check NSString is encoded or not检查 NSString 是否被编码
【发布时间】:2015-10-30 21:12:30
【问题描述】:

如何检测NSString是否已经编码?

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

NSString *encodedUrlString=[[product url] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

【问题讨论】:

    标签: ios objective-c encoding nsstring


    【解决方案1】:

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

    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
    }
    

    顺便说一句 - 这些方法自 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
    }
    

    【讨论】:

    • 感谢您的回答,我的目标是 iOS 9.o
    • 请记住,您不应该对整个 URL 进行编码。您应该只对需要编码的部分进行编码。这通常只是 URL 查询参数的值。一直都是这样。
    • 我的回答中没有你还要求什么?
    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    相关资源
    最近更新 更多