【问题标题】:How to create a custom NSCharacterSet?如何创建自定义 NSCharacterSet?
【发布时间】:2015-12-08 06:17:08
【问题描述】:

我正在使用CharacterSet.urlQueryAllowed 将百分比编码添加到字符串。

某些字符未按我预期的方式编码(即 &? 未更改)。话虽如此,我还是想构建一个自定义的CharacterSet,最好是基于现有的。

最好的方法是什么?

【问题讨论】:

  • 看看NSMutableCharacterSet,它应该让你有可能使用现有的NSCharacterSet

标签: swift urlencode nscharacterset


【解决方案1】:

创建新字符集的最典型方法是使用 CharacterSet(charactersIn:),给出一个包含集合中所有字符的String

可以使用以下方法向现有集合中添加一些字符:

let characterSet = NSMutableCharacterSet() //create an empty mutable set
characterSet.formUnionWithCharacterSet(NSCharacterSet.URLQueryAllowedCharacterSet())
characterSet.addCharactersInString("?&")

或者在 Swift 3+ 中:

var characterSet = CharacterSet.urlQueryAllowed
characterSet.insert(charactersIn: "?&")

对于网址编码,还要注意Objective-C and Swift URL encoding

【讨论】:

  • 工作得很好,谢谢!但是当我尝试添加“ÄÖÜäöü”时它没有任何效果?
  • @mrtn.lxo 您必须在评论中添加更多上下文。你是如何添加它们的?你以后用字符集做什么?
  • 我只是使用了 myCaracterSet.addCharactersInString("Ä")
【解决方案2】:

你可以试试我的方法:

let password = "?+=!@#$%^&*()-_abcdABCD1234`~"

// Swift 2.3
extension NSCharacterSet {
    static var rfc3986Unreserved: NSCharacterSet {
        let mutable = NSMutableCharacterSet()
        mutable.formUnionWithCharacterSet(.alphanumericCharacterSet())
        mutable.addCharactersInString("-_.~")
        return mutable
    }
}

let encoding = password.stringByAddingPercentEncodingWithAllowedCharacters(.rfc3986Unreserved)

// Swift 3
extension CharacterSet {
    static var rfc3986Unreserved: CharacterSet {
        return CharacterSet(charactersIn: "-_.~").union(.alphanumerics)
    }
}

let encoding = password.addingPercentEncoding(withAllowedCharacters: .rfc3986Unreserved)

Print:
original -> ?+=!@#$%^&*()-_abcdABCD1234`~
encoding -> %3F%2B%3D%21%40%23%24%25%5E%26%2A%28%29-_abcdABCD1234%60~

rfc3986: https://www.rfc-editor.org/rfc/rfc3986

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-16
    • 2014-08-05
    • 2016-07-10
    • 1970-01-01
    • 2011-12-29
    • 2017-03-12
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多