2016-08-04 28 views
1

具體而言,它將元音符號作爲兩個字符進行編碼。基金會的字符串編碼不是網站期望的內容

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

encoded然後等於ko%CC%88nnten。所以,它將ö轉換爲o%CC%88。所以它真的很像,其中變音符號(¨)和o是分開的。

然而,大多數網站似乎期待編碼爲%C3%B6,這是ö,其中所述變音符(¨)和o是一個單個字符。

你可以看到編碼的例子並不在這裏工作(如何Foundation要對其進行編碼):

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

,以及如何將理想:

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

是有更好的方法來編碼這個?也許不同的選擇或不同的框架?

回答

1

理想情況下,服務器應該處理預分解和分解 字符串。但是,如果有必要,可以precompose在 客戶端的字符串:

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