- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 电子发票下载提示,版式文件生成及签章功能失败,1506签章数据异常,验证签名失败,请使用正确的签名证书.pdf VIP
- 《超高温灭菌牛奶产品haccp计划》.docx VIP
- 2021年中考英语阅读理解解题方法与技巧ppt课件.pptx VIP
- 2024年冬季山东高中学业水平合格考英语模拟试卷(含答案详解).pdf VIP
- 国际项目管理协会简称.pptx VIP
- 2025年中国大蒜产业数据分析简报.pdf VIP
- 电子档案管理系统技术方案 .pdf VIP
- 自动驾驶出行生态2025.pdf
- 《新编英语听力教程1》教师用书.docx VIP
- 2025年民航招飞pat测试题目及答案.doc VIP
原创力文档


文档评论(0)