2016-08-04 5 views
1

特に、ウムラウトを2文字とするエンコーディング文字です。Foundationの文字列エンコーディングは、サイトが期待しているものではありません。

let unencoded = "könnten" 
let encoded = unencoded.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 

encodedko%CC%88nntenに等しいです。したがって、öo%CC%88に変換しています。したがって、ウムラウト(¨)とoは別々ののようなものです。

はしかし、ほとんどのサイトでは、ウムラウト(¨)とoは、1つの文字ですö、である、%C3%B6するエンコーディングを期待しているように見えます。

あなたは(Foundationがそれをエンコードしたいか)ここで働いていないエンコーディングの例を見ることができます:

https://www.linguee.com/german-english/search?query=ko%CC%88nnten

そして、どのように、それは理想的に次のようになります。

https://www.linguee.com/german-english/search?query=k%C3%B6nnten

ですこれをエンコードするより良い方法はありますか?おそらく異なるオプションや別のフレームワークですか?

答えて

1

サーバは、あらかじめ合成された文字列と分解された文字列の両方に対処するのが理想的です。 しかし、必要であれば、あなたは クライアント側で文字列をプリコンポーズすることができます

let unencoded = "könnten" 
let encoded = unencoded.precomposedStringWithCanonicalMapping 
     .stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())! 

print(encoded) // k%C3%B6nnten 

詳細についてはTechnical Q&A QA1235 – Converting to Precomposed Unicode を参照してください。

+0

素晴らしいですが、完璧に動作します。説明ありがとう。そうです、私が使用しているサイトが両方のフォーマットを受け入れるなら、それは素晴らしいでしょう:しかし、/それはあまり一般的ではないようです。 – solidcell

関連する問題