Android对emoji表情的处理

Android对emoji表情的处理

引言

公司有个项目,iphone手机连接android车机,在车机端进行ipod音乐播放,在进行MFI认证的时候出了问题。认证机构给的列表和歌曲带有表情符号,结果软件就崩了,是底层转码时出问题了。后来底层转码用Unicode,发现android(4.4.2)显示的表情和iphone手机显示的不一样,这个可以参考https://apps.timwhitlock.info/emoji/tables/unicode,android根据码转为自带的表情。后来又发现android车机上显示不少长方形中间带×的符号在这里插入图片描述,推测可能是有些新的符号没有在android4.4中定义,所以显示了这个符号。为了过认证,我们尽量将所有符号,显示成◆带?的形式(Unicode:\ufffd)。

UFT8

在Java里UTF-8,只支持双字节即\u0000-\uFFFF,emoji(?) => “\uD83D\uDC34”
查Symbola表,我们的目标对象大致是从
1F300-1F3FF => “\uD83C\uDF00” - “\uD83C\uDFFF”
1F400-1F4FF => “\uD83D\uDC00” - “\uD83D\uDCFF”
1F500-1F5FF => “\uD83D\uDD00” - “\uD83D\uDDFF”
1F600-1F6FF => “\uD83D\uDE00” - “\uD83D\uDEFF”
1F700-1F7FF => “\uD83D\uDF00” - “\uD83D\uDFFF”

UFT16

UTF-16就利用保留下来的0xD800-0xDFFF区段的码位来对辅助平面的字符的码位进行编码

lead \ trail DC00 DC01 DFFF
D800 10000 10001 103FF
D801 10400 10401 107FF
D8FF 10FC00 10FC01 10FFFF

举例

例如U+10437编码:

0x10437减去0x10000,结果为0x00437,二进制为0000 0000 0100 0011 0111。
分区它的上10位值和下10位值(使用二进制):0000000001 and 0000110111。
添加0xD800到上值,以形成高位:0xD800 + 0x0001 = 0xD801。
添加0xDC00到下值,以形成低位:0xDC00 + 0x0037 = 0xDC37。

过滤emoji

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值