emoji表情如何转换成UTF-8,UTF-16(JVM中)

注:文中可能有错误,欢迎指出来,谢谢

举例说明

emoji表情  

1:比如你的wifi热点名称是一个章鱼符号    u+1F419


2:转化成UTF-8为: F0 9F 90 99

3: 发现在Java的JVM中是用UTF-16存储表示的,也就是u+1F419转化为UTF-16(四个字节表示)为: D8 3D CC 19

此时大象的表情由下层已经传到上层JVM中了,并且保存了,关键在于又要传下去,此时把大象的表情传下去又要转化成 UTF-8,而这个时候大象的表情的Unicode编码为D8 3D CC 19(JVM刚才存储保存的   关于JVM这个,可能说错),传下去意思就是转换成UTF-8,根据相关映射关系,结果为: ED A0 BD ED B0 99

(PS:我就说在项目开发中,为什么手机热点为大象时,相关代码打印出来的16进制表示为 xEDxA0xBDxEdxB0x99  查了一下该表情编码为 U+1F419 )


内容一:

步骤1转化成步骤2过程:

1F419  二进制为:1 1111 0100 0001 1001通过下图的映射关系


因为 1F419 处于 0001 0000-0010 FFFF这个范围 (第四行)所以将 1 1111 0100 0001 1001补进x号中,注意是从右往左补,结果为:

11110xxx 10x11111 10010000 10011001  然后是x用0来补,最终结果为 11110000 10011111 10010000 10011001 ,对应的表示结果(16进制)为 F0 9F 90 99 正式的表示方法为 \xF0\x9F\x90\x99\

内容二:

步骤1转化成步骤3:

Unicode使用UTF-16编码原理:


图片里面的U 指的就是 1F419,因为1F419 >0x10000, 我们先计算 U’= U-10000(此为16进制表示格式哦,换成二进制为 0001 0000 0000 0000 ),U' = 1F419-10000=F419 ,然后将U'写成二进制形式(从右往左写,左边空着的补0) :0000(yyyy)  1111(yyyy) 0100(yyxx) 0001(xxxx) 1001(xxxx)。所以 U 的UTF-16编码(二进制)就是:

1101100000111101 1101110000011001(用16进制表示为: D83D CC19,注:用四个字节表示的,前面两个一块,后面两个一块的   (这是我有疑惑的地方))此时在上层就是这样保存该表情的,

然后又要下发给底层,相当于是 大象的表情此时的Unicode二进制编码为 1101100000111101 1101110000011001,使用Unicode转化成UTF-8的映射图表如下图(和上面一样一样滴)


属于00000800 - 0000FFFF(第三行)范围(用16进制表示为: D83D  CC19,注:用四个字节表示的,前面两个一块,后面两个一块的(这是本片文章我有疑惑的地方))D83D转化成UTF-8字节流(二进制)结果为: 11101101  10100000 10111101 ;CC19转化成UTF-8字节流(二进制)结果为:11101101 10110000 10011001,合起来结果就是11101101 10100000 10111101 11101101 10110000 10011001,对应的16进制为:ED A0 BD ED B0 99 ,正式的写法为:\xED\xA0\xBD\xED\xB0\x99\.终于我知道了相关日志打印出来的wifi名称是大象的表情的编码为 \xED\xA0\xBD\xED\xB0\x99\


感谢这位博主的文章,谢啦。http://blog.csdn.net/u200814499/article/details/53420263



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值