2017-12-29 23 views
0

Extended Grapheme Clustersで1つの質問があります。 たとえば、次のコードを見て: Extended Grapheme Clustersの合成が停止する

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

はどのようスウィフトは、それが結合する必要が知っている(すなわちC)かなり小さい文字Cと「を組み合わせるセディーユ」として、それを処理するよりも?

+1

これはUnicode標準の一部です。https://developer.apple.com/ライブラリ/コンテンツ/ qa/qa1235/_index.html。好奇心以外のことを知りたい理由はありますか? –

+0

ねえ、リンクをありがとう。私はちょうどそれがどのように動作するのか興味がありました。考えられるシナリオの1つは、「結合された結果がçになる」というようなテキストを持つことです。この文章では、cの後の最初の "̧"は "c"とcと結合されていません。私はそれがスウィフトでどのようにできるのだろうと思っていました。 – user744641

+0

言い換えれば、分解された2つのUnicode文字を文字通り2文字で表示するにはどうすればよいでしょうか? – user744641

答えて

1

文字列にunicodeScalarsビューを使用しますApple's Technical Q&Aで述べたようにいないすべての複合文字は、合成済みのフォームを持っていることを

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 
} 

注:

重要:合成済みに変換しないでくださいをテキスト処理を簡素化するためにUnicodeを使用します。あらかじめ合成されたUnicodeには複合文字が含まれることがあります。たとえば、U + 0065 U + 030A(LATIN小文字Eに続いてCOMBINING RING ABOVE)の事前構成された等価物はありません。

+0

ありがとう!それはすべてのものをクリアする。 – user744641

関連する問題