具体来说,它将带有元音变音符的字符编码为两个字符。
let unencoded = "könnten"
let encoded = unencoded.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
则CCD_ 1等于CCD_。因此,它将ö
转换为o%CC%88
。所以它真的很像o¨
,其中变音(¨
)和o
是分开的。
然而,大多数站点似乎期望编码为%C3%B6
,即ö
,其中元音变音符(encoded
0)和o
是一个单独的字符。
您可以在这里看到一个编码不起作用的例子(Foundation
想要如何编码):
https://www.linguee.com/german-english/search?query=ko%CC%88nnten
以及理想情况:
https://www.linguee.com/german-english/search?query=k%C3%B6nnten
有更好的编码方法吗?也许是不同的选择或不同的框架?
理想情况下,服务器应该同时处理预编译和分解字符串。但是,如果需要,可以在客户端:
let unencoded = "könnten"
let encoded = unencoded.precomposedStringWithCanonicalMapping
.stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())!
print(encoded) // k%C3%B6nnten
参见技术问答;一个QA1235——转换为预组合Unicode了解更多信息。