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 := range 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 Android 中实现 emoji 表情选择的 View,一般可以采用以下两种方式: 1. 使用第三方库 可以使用一些开源的第三方库,如: - Emoji-Keyboard:https://github.com/rockerhieu/emojicon - EmojiEditText:https://github.com/kimoBiko/EmojiEditText - EmojiCompat:https://developer.android.com/topic/libraries/support-library/packages#emoji-compat 这些库都提供了丰富的 emoji 表情选择界面和相关的实现方法,可以方便地集成到项目中。 2. 自定义 View 如果需要更灵活地实现 emoji 表情选择的 View,可以自己实现一个自定义 View。具体实现步骤如下: 1. 准备 emoji 表情资源 首先需要准备 emoji 表情的资源,可以自己设计或者使用现成的资源。将这些资源放在项目的 res 目录下。 2. 自定义 View 自定义 View 可以继承自 LinearLayout,包含一个 EditText 和一个 GridView。 在 EditText 的右侧添加一个按钮,点击按钮时显示 emoji 表情选择的 GridView,点击表情后将表情插入到 EditText 中。 3. 实现表情选择的 GridView GridView 中的每个表情可以使用 ImageView 显示,可以通过设置表情资源的 ID 来显示不同表情。在表情选择界面的底部可以添加一个删除按钮,点击删除按钮可以删除 EditText 中的最后一个字符或者最后一个表情。 4. 实现点击表情插入到 EditText 的功能 当用户点击 GridView 中的表情时,可以将表情插入到 EditText 中。可以通过在 EditText 中插入一个 SpannableString 来实现,其中 SpannableString 中包含了表情的资源 ID。 以上就是实现 emoji 表情选择的 View 的一般步骤,可以根据具体需求进行自定义实现

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值