相关疑难解决方法(0)

为什么表情符号在Swift字符串中被如此奇怪地处理?

角色(有两个女人,一个女孩和一个男孩的家庭)编码如下:

U+1F469 WOMAN,
?U+200D ZWJ,
U+1F469 WOMAN,
U+200D ZWJ,
U+1F467 GIRL,
U+200D ZWJ,
U+1F466 BOY

所以它非常有趣地编码; 单元测试的完美目标.然而,斯威夫特似乎不知道如何对待它.这就是我的意思:

"???".contains("???") // true
"???".contains("") // false
"???".contains("\u{200D}") // false
"???".contains("") // false
"???".contains("") // true
Run Code Online (Sandbox Code Playgroud)

所以,斯威夫特说它包含自己(好)和一个男孩(好!).但它说它不包含女人,女孩或零宽度木匠.这里发生了什么事?斯威夫特为什么知道它包含一个男孩而不是女人或女孩?我能理解它是否将它视为一个单一的角色并且只识别它包含它自己,但事实上它有一个子组件,没有其他人困惑我.

如果我使用类似的东西,这不会改变"".characters.first!.


更令人困惑的是:

let manual = "\u{1F469}\u{200D}\u{1F469}\u{200D}\u{1F467}\u{200D}\u{1F466}"
Array(manual.characters) // ["?", "?", "?", ""]
Run Code Online (Sandbox Code Playgroud)

即使我将ZWJ放在那里,它们也不会反映在字符数组中.接下来是一个小小的说法:

manual.contains("") // false
manual.contains("") // false
manual.contains("") // true
Run Code Online (Sandbox Code Playgroud)

所以我得到了与字符数组相同的行为...这是非常烦人的,因为我知道数组的样子.

如果我使用类似的东西,这也不会改变"".characters.first!.

string unicode emoji swift

524
推荐指数
5
解决办法
3万
查看次数

标签 统计

emoji ×1

string ×1

swift ×1

unicode ×1