在Swift中转换String的瑞典章程

时间:2014-10-20 15:05:11

标签: string swift

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

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

1 个答案:

答案 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。