Foundation的字符串编码不是网站所期望的



具体来说,它将带有元音变音符的字符编码为两个字符。

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

则CCD_ 1等于CCD_。因此,它将ö转换为o%CC%88。所以它真的很像,其中变音(¨)和o是分开的。

然而,大多数站点似乎期望编码为%C3%B6,即ö,其中元音变音符(encoded0)和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了解更多信息。

最新更新