2016-08-04 18 views
1

Insbesondere Codierung Zeichen mit einem Umlaut als zwei Zeichen.Foundation String-Codierung ist nicht, was Websites erwarten

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

encoded ist dann gleich ko%CC%88nnten. Also, es wandelt die ö in o%CC%88 um. So ist es wirklich wie , wo der Umlaut (¨) und der o sind getrennt.

Allerdings scheinen die meisten Seiten die Codierung zu erwarten %C3%B6 zu sein, die ö ist, wo die Umlaute (¨) und o ein einzelnes Zeichen sind.

können Sie ein Beispiel für die Codierung nicht sehen, hier zu arbeiten (wie Foundation will sie kodieren):

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

Und wie wäre es ideal sein:

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

Ist gibt es einen besseren Weg, dies zu kodieren? Vielleicht verschiedene Optionen oder ein anderer Rahmen?

Antwort

1

Idealerweise sollte der Server sowohl vorkomposierte als auch zerlegte Strings verarbeiten können. Aber wenn nötig, können Sie die Zeichenfolge auf der Client-Seite precompose:

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

print(encoded) // k%C3%B6nnten 

Siehe Technical Q&A QA1235 – Converting to Precomposed Unicode für weitere Informationen.

+0

Super, es funktioniert perfekt. Danke für die Erklärung. Ja, es wäre großartig, wenn die Seiten, die ich verwende, beide Formate akzeptieren würden, aber leider:/Es scheint ziemlich üblich zu sein, dass sie das nicht tun. – solidcell