在Swift中转换String的瑞典章程

Osc*_*car 0 string swift

var str = "Stavsnäs"
var strWithoutWierdCharacters = str.stringByReplacingOccurrencesOfString("ä", withString: "ä", options: NSStringCompareOptions.LiteralSearch, range:nil)
Run Code Online (Sandbox Code Playgroud)

在Swift中必须有更好的方法吗?

Mar*_*n R 7

对于"真实"字符串的每个UTF-8字节,似乎str有一个Unicode字符.例如,字符"ä"(具有UTF-8表示)存储为两个Unicode字符"Ã"= 和"¤"= .C3 A4U+00C3U+00A4

最好在"输入端"修复该问题.如果不可能,只要所有字符str都在以下范围内,以下技巧就会起作用U+0000 .. U+00FF:

let str = "Stavsnäs"
if let data = str.dataUsingEncoding(NSISOLatin1StringEncoding) {
    if let fixed = NSString(data: data, encoding: NSUTF8StringEncoding) {
        println(fixed) // Stavsnäs
    }
}
Run Code Online (Sandbox Code Playgroud)

它使用将NSISOLatin1StringEncodingUnicode字符U+0000 .. U+00FF精确映射 到字节的事实 00 .. FF.因此,将"¤"转换为字节 C3 A4,然后将这些字节解释为UTF-8并转换回Unicode.