关键词:emoji、unicode、utf8、go、golang、颜文字、表情
什么是emoji
emoji就是一些意形符号。
emoji的实现
首先,你必须能够区分unicode
、utf8
和字符
之间的区别,如果不明白请查看《一次彻底搞清unicode、utf8和utf8mb4》:
unicode
,字符集,就是一个表格,记录这字符和码点(通常表示为U+0031
)之间的关系utf8
,是unicode的编码方案之一(还有utf16、utf32等)字符
,是人类可以阅读的符号。emoji就是一批比较特殊的符号(可以理解为图片或者像素点集合)
因为是一种实现,所以不同平台实现的各不一样。以ok
表情为例,各平台的实现如下:
emoji分类
Basic_Emoji
基本emoji,包含两种类型
- 单一unicode字符
- 单一unicode字符后面增加
*U+FE0E*
或者U+FE0F
分别表示以黑白文本模式还是彩色模式展示表情
Emoji_Keycap_Sequence
键帽序列,都是0-9、#、*
开头,然后后面紧跟着U+FE0F
和U+20E3
两个字符组合而成。
字符长度:均是3字符
需要注意的是苹果输入法打出的键帽序列是反的,即U+20E3
在前U+FE0F
在后面
func TestEmoji(t *testing.T) {
s := "1⃣️"
fmt.Printf("字节数:%d, 字符数:%d\n", len(s), len([]rune(s)))
hexDump(s)
}
func hexDump(s string) {
fmt.Printf("字符串:%s\n======================\n", s)
for index, item := range