Surface Chars
s := []rune("1️⃣,😄") // 按照以往的经验,utf8 能存下大部分符号表情
嘿这不就是三个 utf8 字符嘛,求字符个数肯定是 3 嘛。
fmt.Println(len(s)) // 5
What the hell is this?
到这里脑子没有嗡嗡的朋友,请你离开这里,去更远的远方,别回头。
Really Chars
好家伙,打印看看到底是什么东西脏了我的眼
for _, v := range s {
// 字符 Unicode 二进制
// 1 U+0031 110001
//️ U+FE0F 1111111000001111
// ⃣ U+20E3 10000011100011
// , U+002C 101100
// 😄 U+1F604 11111011000000100
fmt.Printf("%c %U %b\n", v, v)
}
可以看到打印出第一个符号 1️⃣ 是由于三个 unicode 字符
[U+0031, U+FE0F, U+20E3] 组成的一个复合符号,其实每个字符都是有自己的意义的,只不过当三个字符在一起的时候会产生奇妙的变化。
(这个符号你在 IDE 上打出来,然后左右移动箭头,会发现要移动三次才能离开)
开始学习(内卷)
U+FE0F 三个字符中中间这个甚是诡异,从这个开始分析找点(学习资料)
-
变体选择器 知乎上的解释 形象的例子
-
键帽序列
键帽序列是将数字0-9,*和#在VS-16的基础上通过U+20E3字符转换为键帽的样式。 例如:(U+0031 U+FE0F U+20E3) 的 emoji 就是 1️⃣
差不多的比喻:
妹子 A: `U+0023` 我是一个基础的 emoji 表情。
渣男 B: `U+FEOF` 对上面的妹子 A 说,不,你不是普通的表情,你很特别,起码在我心中。
某物品 C: `U+20E3` 带上它,你会多一层保护。
到这里脑子还在嗡嗡的朋友,请你离开这里,去更远的远方,别回头。