6
为什么在Swift字符串中像👩👩👩👦这样的表情符号字符被如此奇怪地对待?
字符👩👩👧👦(有两个女人,一个女孩和一个男孩的家庭)的编码如下: 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知道其中包含一个男孩,却没有一个女人或女孩?我能理解它是否被视为单个字符,并且仅识别出它包含自身,但事实是它只有一个子组件而没有其他组件令我感到困惑。 如果使用,则不会改变"👩".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("👧") // …