Go语言:原来不同平台的emoji表情是这样实现的

本文探讨了emoji的定义和实现,包括不同平台的实现差异。详细介绍了emoji的分类,如Basic_Emoji、键帽序列、旗帜序列、标签序列和修饰序列,并解释了零宽度链接符的作用。此外,还讨论了Go语言处理emoji的方法,提到了相关资源和库。
摘要由CSDN通过智能技术生成

关键词:emoji、unicode、utf8、go、golang、颜文字、表情

什么是emoji

emoji就是一些意形符号。

emoji的实现

首先,你必须能够区分unicodeutf8字符之间的区别,如果不明白请查看《一次彻底搞清unicode、utf8和utf8mb4》

  • unicode,字符集,就是一个表格,记录这字符和码点(通常表示为U+0031)之间的关系
  • utf8,是unicode的编码方案之一(还有utf16、utf32等)
  • 字符,是人类可以阅读的符号。emoji就是一批比较特殊的符号(可以理解为图片或者像素点集合)

因为是一种实现,所以不同平台实现的各不一样。以ok表情为例,各平台的实现如下:

image-20210302223155359

emoji分类

Basic_Emoji

基本emoji,包含两种类型

  • 单一unicode字符
  • 单一unicode字符后面增加*U+FE0E*或者U+FE0F分别表示以黑白文本模式还是彩色模式展示表情

Emoji_Keycap_Sequence

键帽序列,都是0-9、#、*开头,然后后面紧跟着U+FE0FU+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 := 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值