即使在@ user3441734 solved most of my problems之后,也有一些表情符号在从[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($0,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
的每个作业的注释,以查看问题的实际效果。第3和第4个值应该像这样渲染:
和
...思想
u = "1f468-2764-1f48b-1f468"
u{200d}
没有帮助。所以,Apple& Chrome对某些表情符号的处理,还是我错过了标准的另一个特质?
答案 0 :(得分:3)
没有阴谋,你的代码中存在错误。
第一个字符可以用:
制作 U+1F468
U+200D
U+2764
U+FE0F
U+200D
U+1F48B
U+200D
U+1F468
注意每个角色之间的ZERO WIDTH JOINER(U+200D
)和HEAVY BLACK HEART(U+FE0F
)上的VARIATION SELECTOR-16选择器(U+2764
)以确保表情符号演示使用了风格。
有关已实施的多人分组的完整列表,请参阅this table。
U+1F3C7
HORSE RACING不是表情符号修饰符基础,因此它不支持肤色修饰符。