var str = "Stavsnäs"
var strWithoutWierdCharacters = str.stringByReplacingOccurrencesOfString("ä", withString: "ä", options: NSStringCompareOptions.LiteralSearch, range:nil)
在Swift中必须有更好的方法吗?
答案 0 :(得分:7)
str
似乎每个 UTF-8字节都有一个 Unicode 字符
“真正的”字符串。例如,字符“ä”(具有 UTF-8 表示C3 A4
)存储为两个Unicode字符“Ô= U+00C3
和“¤”= U+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
}
}
它使用NSISOLatin1StringEncoding
映射Unicode字符的事实
U+0000 .. U+00FF
完全与字节00 .. FF
完全相同。所以“¤”被转换为字节
C3 A4
然后将这些字节解释为UTF-8并转换回Unicode。