2016-04-23 5 views
1

これらの文字のいずれかが含まれている場合引用符または中括弧を含む有効な文字列をNSURLが受け入れないのはなぜですか?

https://www.someurl.com/search?&access_token=1,84,848473938;848483,83&_json={"key1":"value1","key2":"value2"} 

EDITは、JSON文字列を持つURLを宣言するとき、私は明らかに括弧_json={ }を使用する必要があると\"key1\":\"value1\"

NSURL(string: String)をqoutes、しかし、魔法のnilなり、文字列にだから、

ここに正しく答えとして:NSURL is returning nil for a valid URL、私が使用してみました:

let url = NSURL(string: url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!) 

をしかし、私はそれがスウィフト2の前だったので、それは非推奨だと考えているがリリースされたと私はエラーを取得しています:cannot convert value of Type NSCharacterSet to expected argument type NSStringEncoding (aka UInt)

だから私は、

let url = NSURL(string: url.stringByAddingPercentEncodingWithAllowedCharacters(NSUTF8StringEncoding)!)! 

を使用してみました、それはNSURLではなく、ゼロの値を持つことができるようでしたが、それは期待される結果を返すので、Sはなかったです何かはまだ間違っています。

ブラウザでURL文字列を手動で入力すると、期待される結果が得られるので、形式が正しいことがわかります。私がXcodeからエンコードされたバージョンをコピー/ペーストすると、上記のようにエンコードするときSwiftと同じように間違った結果が出ます。

いずれの洞察も高く評価されます。

+1

使用しようとしている特定の文字列は何ですか? – jtbandes

+1

JSONオブジェクトをURLに配置しようとしていることを正しく理解していますか? – DeFrenZ

+0

はい私の文字列にJSONオブジェクトを入れています。私は 'stringByAddingPerecent ...'(私は正確な呼び出し名を忘れてしまった)を使用しましたが、それはすべてのオブジェクトを変更するものではありません。中カッコと引用符を変更しますが、コンマは変更しません。私は手動で文字を変更し、私が望む新しい応答をうまく受信するための関数を含んでいました。私はOPを編集して問題の強いものを含めました。 – dbconfession

答えて

1

変更可能な文字セットを変更して、許可された文字を削除することができます。コンマをエンコードする場合は、URLQueryAllowedCharacterSetからカンマを削除してから使用してください。

2スウィフトでは、我々はこのようNSMutableCharacterSetで踊るする必要があります。

let sourceURL = "https://www.someurl.com/search?&access_token=1,84,848473938;848483,83&_json={\"key1\":\"value1\",\"key2\":\"value2\"}" 

let charSet = NSMutableCharacterSet() 
charSet.formUnionWithCharacterSet(NSCharacterSet.URLQueryAllowedCharacterSet()) 
charSet.removeCharactersInString(",") 

let url = NSURL(string: sourceURL.stringByAddingPercentEncodingWithAllowedCharacters(charSet)!) 

print(url!) 

版画:

https://www.someurl.com/search?&access_token=1%2C84%2C848473938;848483%2C83&_json=%7B%22key1%22:%22value1%22%2C%22key2%22:%22value2%22%7D

スウィフト3私たちが使用していると同じことを行うにはの代わりにCharacterSet構造体を使用しますが、同じ考えです。

var charSet = CharacterSet() 
charSet.formUnion(.urlQueryAllowed) 
charSet.remove(",") 
if let encoded = sourceURL.addingPercentEncoding(withAllowedCharacters: charSet) { 
    if let url = URL(string: encoded) { 
     print(url) 
    } 
} 
関連する問題