2017-12-29 42 views
0

Extended Grapheme Clusters에 대해 하나의 질문이 있습니다. 예를 들어, 다음 코드를 살펴 : Extended Grapheme Clusters의 결합이 중지됩니다.

let message = "c\u{0327}a va bien" // => "ça va bien" 

어떻게 스위프트는 결합 될 필요가 알고 않는다 (즉, ç)보다는 작은 문자 c와 "COMBINING 세 디유"로 치료보다 더?

+1

유니 코드 표준의 일부인 https://developer.apple.com/ library/content/qa/qa1235/_index.html. 호기심 이외에 알고 싶은 이유가 있습니까? –

+0

안녕하세요. 링크를 제공해 주셔서 감사합니다. 나는 그것이 어떻게 작동하는지 궁금해했다. 하나의 가능한 시나리오는 "결합 된 결과가 ç 일 것"과 같은 텍스트를 가질 수 있습니다. 그 텍스트에서 c 뒤에 오는 첫 번째 "̧"는 "ç"에 c와 결합되지 않습니다. 스위프트에서 어떻게 그렇게 할 수 있는지 궁금합니다. – user744641

+0

즉, 두 개의 분해 된 유니 코드 문자를 하나의 문자가 아닌 2 개의 문자로 표시하려면 어떻게해야합니까? – user744641

답변

1

문자열에 unicodeScalars보기 사용

let message1 = "c\u{0327}".decomposedStringWithCanonicalMapping 
for scalar in message1.unicodeScalars { 
    print(scalar) // print c and Combining Cedilla separately 
} 

let message2 = "c\u{0327}".precomposedStringWithCanonicalMapping 
for scalar in message2.unicodeScalars { 
    print(scalar) // print Latin Small Letter C with Cedilla 
} 

Apple's Technical Q&A에 의해 언급 된 모든 복합 문자가하는 사전 구성된 양식을 가지고 :

중요 :는 미리 만들어진로 변환하지 마십시오 텍스트 처리를 단순화하기위한 유니 코드 사전 구성된 유니 코드는 여전히 복합 문자를 포함 할 수 있습니다. 예를 들어, U + 0065 U + 030A (라틴 소문자 E와 그 뒤에 결합 링이 뒤 따른다)의 동등한 사전은 없습니다.

+0

고마워요! 그것은 모든 것을 지 웁니다. – user744641