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

Swift에서 더 나은 방법이 있어야합니까?Swift에서 문자열의 스웨덴어 전세 변환

+1

나는 스위프트를 사용하지 않았지만 이런 종류의 문제는 인코딩과 관련이 있습니다. ISO-8859-1에서 유니 코드로 변환하는 솔루션을 찾아보십시오. –

+0

문자열 "Stavsnäs"는 어디에서 왔습니까? 문자열을 만들 때 이전 시점에서 문제를 수정하는 것이 좋습니다. –

+0

API에서 온다 나는 제어 할 수 없다 ... : / – Oscar

답변

5

strUTF-8 바이트 "진짜"문자열의 하나 개 유니 코드 문자가 보인다. 예를 들어 문자 "ä"(UTF-8 표현은 C3 A4)는 두 유니 코드 문자 "Ã"= 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 정확히 바이트 00 .. FF에 유니 코드 문자 U+0000 .. U+00FF 매핑 사실을 사용합니다. 따라서 "¤¤"는 바이트 C3 A4으로 변환되고이 바이트는 UTF-8로 해석되어 다시 유니 코드로 변환됩니다.

관련 문제