2015-09-11 19 views
12

私はNSCharacterSet.URLQueryAllowedCharacterSet()を使用して文字列にパーセントエンコーディングを追加していますが、一部の文字では「&」または「?」の文字は見えないようです。既存のものに基づいてカスタムNSCharacterSetを構築するにはどうすればよいですか?カスタムNSCharacterSetの作成方法は?

+1

ルック。 – Larme

答えて

30

新しい文字セットを作成する最も一般的な方法は、 CharacterSet(charactersIn:)を使用し、セットのすべての文字をStringとしています。

URLエンコード用
var characterSet = CharacterSet.urlQueryAllowed 
characterSet.insert(charactersIn: "?&") 

、また、あなたが試すことができObjective-C and Swift URL encoding

+0

完璧に動作します、ありがとう!しかし、 "ÄÖÜäöü"を追加しようとすると効果はありませんか? – ixany

+0

@ mrtn.lxoコメントに文脈を追加する必要があります。どのようにそれらを追加していますか?後でキャラクターセットで何をしていますか? – Sulthan

+0

私は単純にmyCaracterSet.addCharactersInString( "Ä")を使用しました。 – ixany

2

の点に注意してください。

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

または単にスウィフト3を既存のセットに一部の文字を追加する

を使用して達成することができます私の方法:

let password = "[email protected]#$%^&*()-_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 -> [email protected]#$%^&*()-_abcdABCD1234`~ 
encoding -> %3F%2B%3D%21%40%23%24%25%5E%26%2A%28%29-_abcdABCD1234%60~ 

RFC3986:あなたの既存 `NSCharacterSet`でプレーする可能性を与える必要がありますNSMutableCharacterSet``で https://tools.ietf.org/html/rfc3986 reference

関連する問題