2014-10-20 18 views
0
var str = "Stavsnäs" 
var strWithoutWierdCharacters = str.stringByReplacingOccurrencesOfString("ä", withString: "ä", options: NSStringCompareOptions.LiteralSearch, range:nil) 

在Swift中必须有更好的方法来做到这一点?转换Swift中的字符串瑞典宪章

+1

我没有使用过Swift,但是这种问题与编码有关。尝试找到将ISO-8859-1转换为Unicode的解决方案。 – 2014-10-20 15:07:22

+0

字符串“Stavsnäs”从哪里来?在创建字符串时,最好先解决问题。 – 2014-10-20 15:11:36

+0

它来自一个API,我无法控制...:/ – Oscar 2014-10-20 15:12:39

回答

5

看来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。