unifiedemoji表情forandroid.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
unifiedemoji表情forandroid

Unified Emoji表情for Android 这个是我做Android以来碰到的最烦的东西,该死的emoji表情,恨之入骨。。无奈这个问题分配给我了。我也只能硬着头皮做。 0.吐个槽先 首先,你要明白什么是emoji表情,不知道的google,不需要支持emoji的可以绕道了。 emoji有很多不同的版本,我tm最讨厌的就是不同版本的了。Unified?DoCoMo?KDDI?Softbank?Google 因为ios5升级了,emoji编码从softbank变成unified了。所以只能Android这边改了。伤心。 我要做的工作就是把消息中含有的unified的emoji编码过滤出来,然后映射出对应的表情资源显示出来。 1.准备工作。 google下emoji表情的历史,google code上有个源码,不过是java的,那么你要把它改成java的。。(记得当初解析gif表情时也是把java改成android,可怜的我为咩总是干这活。。) 这里有个link,上面有所有的编码对应转换。Emoji for PHP 然后google code里有所有对应的编码转换的xml。叫emoji4unicode.xml. 这里是link:?emoji4unicode 如果没兴趣我等下会直接贴代码的,但是最好你先自己弄明白解析的原理是什么,emoji表情一直在增加,以后要兼容你就得自己想办法了。 2.举个例子 black sun with rays unified :?U+2600 softbank:?U+E04A 如果以前你解析过softbank,应该很熟悉了。好歹它还有个大致得顺序,解析得时候只要判断是否在这个unicode范围内就可以了。so easy 可是unified完全是无顺序得,所以必须得自己建好映射。 因为原始的emoji.xml很大,把所有的描述信息都放里面了,我不需要,所以我写了个java把xml解析了一遍,然后重新生成了一个我需要的xml。贴个图出来大家看下。 you see , 这个原始的xml实在太大了,有162K,而且还是xml解析。。你想想多耗内存和时间。所以必须把它再转换一遍。 so 这个过程做好了,就可以进行下一步真正的解析了。。 3 解析过程。 因为emoji是有表情分组的,所以你要优先考虑解析出来的也是分好组的。 HashMapString, ArrayListString emoMap = new HashMapString, ArrayListString(); 我是这么来分组的。 解析xml,然后把2600这样的字符串转换成unicode。这个很关键,映射对应不上肯定也解析不出来。要注意的一点是有的emoji是两个unicode组成的 ?U+1F1F0 U+1F1F7 ?这样。。所以么。又多了一个环节。 HashMapListInteger, String convertMap = new HashMapListInteger, String(); 再定义一个map来存unicode和string字符的映射。 if?(xmlpull.getName().equals(e))?{ fromAttr?=?xmlpull.nextText(); emos.add(fromAttr); ListInteger?fromCodePoints?=?new?ArrayListInteger(); if?(fromAttr.length()??6)?{ String[]?froms?=?fromAttr.split(\\_); for?(String?part?:?froms)?{ fromCodePoints.add(Integer.parseInt(part,?16)); } }?else?{ fromCodePoints.add(Integer.parseInt(fromAttr,?16)); } convertMap.put(fromCodePoints,?fromAttr); } 这样就把整个解析都写到内存里了。这个就做成单例咯,在程序一进来,application里初始化。 4,解析过程 这里我是把emoji表情解析出来,再改成[e]2600[/e]的形式。然后再用正则再解析一遍(为什么这样做。。因为消息里面不可能只有emoji表情的啊亲。。。你还要解析另外的表情。) 下面是过滤emoji表情的方法: public?String?parseEmoji(String?input)?{ if?(input?==?null?||?input.length()?=?0)?{ return?; } StringBuilder?result?=?new?StringBuilder(); int[]?co

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档