6
👩👩👧👦のような絵文字がSwift文字列で奇妙に扱われるのはなぜですか?
文字👩👩👧👦(女性2人、女の子1人、男の子1人の家族)は、次のようにエンコードされます。 U+1F469 WOMAN、 U+200D ZWJ、 U+1F469 WOMAN、 U+200D ZWJ、 U+1F467 GIRL、 U+200D ZWJ、 U+1F466 BOY したがって、非常に興味深いエンコード方式です。単体テストの完璧なターゲット。ただし、Swiftはその処理方法を認識していないようです。これが私の意味です: "👩👩👧👦".contains("👩👩👧👦") // true "👩👩👧👦".contains("👩") // false "👩👩👧👦".contains("\u{200D}") // false "👩👩👧👦".contains("👧") // false "👩👩👧👦".contains("👦") // true それで、スウィフトはそれがそれ自身(良い)と男の子(良い!)を含んでいると言います。しかし、それはそれは女性、女の子、またはゼロ幅のジョイナーが含まれていないと言います。ここで何が起こっているのですか?なぜSwiftは少年が含まれているのに女性や少女が含まれていないことを知っているのですか?それが単一の文字として扱われ、それ自体を含むだけであると認識した場合は理解できましたが、サブコンポーネントが1つしかなく、他のコンポーネントがないという事実は、私を困惑させます。 これは、のようなものを使用しても変わりません"👩".characters.first!。 さらに交絡はこれです: let manual = "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}" Array(manual.characters) // ["👩", "👩", "👧", "👦"] そこにZWJを配置しても、文字配列には反映されません。その後のことは少し語っていました: manual.contains("👩") // false manual.contains("👧") // …