顽固的表情符号不会组合:❤
Stubborn emoji won't combine: ❤
即使在 @user3441734 之后,从 [String:String] 转换为 String 时,仍有一些表情符号似乎无法正确呈现。
这里有一些可用于 Playground 的代码来说明问题:
var u = ""
u = "1f468-1f468-1f467-1f467" //
//u = "1f918-1f3ff" //
//u = "1f468-2764-1f48b-1f468" // ❤ (broken)
//u = "1f3c7-1f3fb" // (broken)
let unicodeArray = u.characters.split("-")
.map(String.init)
.map {String(UnicodeScalar(Int([=10=],radix: 16) ?? 0))}
if let last = unicodeArray.last {
let separator: String
switch (unicodeArray.first, last) {
// Failed attempt to get tone applied to jockey
case let (horse_racing, _) where horse_racing == "\u{1f3c7}":
separator = "\u{200d}"
case let (_, tone) where "\u{1f3fb}"..."\u{1f3ff}" ~= tone:
separator = ""
case let (_, regionalIndicatorSymbol) where "\u{1f1e6}"..."\u{1f1ff}" ~= regionalIndicatorSymbol:
separator = ""
default:
separator = "\u{200d}"
}
print(unicodeArray.joinWithSeparator(separator))
}
依次取消对 u
的每个作业的注释,以查看实际问题。第三个和第四个值应该像这样呈现:
和
想法…
- 事实证明,长按赛马无法显示 iOS 上的肤色,所以我们假设这只是一个疏忽,可能与判断骑师的肤色几乎不可能有关在标准表情符号大小。我仍然无法弄清楚
u = "1f468-2764-1f48b-1f468"
的问题
- 如果这个问题完全不清楚,我们深表歉意。 Chrome 和 Safari 有不同的行为 w.r.t 这些组合表情符号,所以只有链接的图像才能保证以我在我这边看到的方式出现在你面前。
- 这些表情符号要么是肤色渲染,要么是同性感情的象征。系统中是否潜伏着某种奇怪的潜在种族主义和恐同症?! (提示阴谋论。)
- 请注意,我尝试使用零宽度连接器,
u{200d}
没有帮助。
所以,Apple 和 Chrome 对某些表情符号的处理存在错误,还是我错过了标准的另一种特质?
没有阴谋,错误在你的代码中。
第一个字符可以用:
U+1F468
U+200D
U+2764
U+FE0F
U+200D
U+1F48B
U+200D
U+1F468
注意每个字符之间的零宽度连接器 (U+200D
),以及 HEAVY BLACK HEART (U+2764
) 上的 VARIATION SELECTOR-16 选择器 (U+FE0F
) 以确保使用表情符号呈现方式。
参考this table获取已实现的多人分组的完整列表。
U+1F3C7
赛马不是表情符号修改器基础,因此不支持肤色修改器。
即使在 @user3441734
这里有一些可用于 Playground 的代码来说明问题:
var u = ""
u = "1f468-1f468-1f467-1f467" //
//u = "1f918-1f3ff" //
//u = "1f468-2764-1f48b-1f468" // ❤ (broken)
//u = "1f3c7-1f3fb" // (broken)
let unicodeArray = u.characters.split("-")
.map(String.init)
.map {String(UnicodeScalar(Int([=10=],radix: 16) ?? 0))}
if let last = unicodeArray.last {
let separator: String
switch (unicodeArray.first, last) {
// Failed attempt to get tone applied to jockey
case let (horse_racing, _) where horse_racing == "\u{1f3c7}":
separator = "\u{200d}"
case let (_, tone) where "\u{1f3fb}"..."\u{1f3ff}" ~= tone:
separator = ""
case let (_, regionalIndicatorSymbol) where "\u{1f1e6}"..."\u{1f1ff}" ~= regionalIndicatorSymbol:
separator = ""
default:
separator = "\u{200d}"
}
print(unicodeArray.joinWithSeparator(separator))
}
依次取消对 u
的每个作业的注释,以查看实际问题。第三个和第四个值应该像这样呈现:
和
想法…
- 事实证明,长按赛马无法显示 iOS 上的肤色,所以我们假设这只是一个疏忽,可能与判断骑师的肤色几乎不可能有关在标准表情符号大小。我仍然无法弄清楚
u = "1f468-2764-1f48b-1f468"
的问题
- 如果这个问题完全不清楚,我们深表歉意。 Chrome 和 Safari 有不同的行为 w.r.t 这些组合表情符号,所以只有链接的图像才能保证以我在我这边看到的方式出现在你面前。
- 这些表情符号要么是肤色渲染,要么是同性感情的象征。系统中是否潜伏着某种奇怪的潜在种族主义和恐同症?! (提示阴谋论。)
- 请注意,我尝试使用零宽度连接器,
u{200d}
没有帮助。
所以,Apple 和 Chrome 对某些表情符号的处理存在错误,还是我错过了标准的另一种特质?
没有阴谋,错误在你的代码中。
第一个字符可以用:
U+1F468
U+200D
U+2764
U+FE0F
U+200D
U+1F48B
U+200D
U+1F468
注意每个字符之间的零宽度连接器 (
U+200D
),以及 HEAVY BLACK HEART (U+2764
) 上的 VARIATION SELECTOR-16 选择器 (U+FE0F
) 以确保使用表情符号呈现方式。参考this table获取已实现的多人分组的完整列表。
U+1F3C7
赛马不是表情符号修改器基础,因此不支持肤色修改器。