var str = "Stavsnäs"
var strWithoutWierdCharacters = str.stringByReplacingOccurrencesOfString("ä", withString: "ä", options: NSStringCompareOptions.LiteralSearch, range:nil)
Run Code Online (Sandbox Code Playgroud)
在Swift中必须有更好的方法吗?
对于"真实"字符串的每个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.