题外话(可以略过)

相信这篇文章已经让大家等的太久了,不是我故弄玄虚、吊大家胃口,而是写一篇文章真的需要花太多的时间。也许一篇文章,你们花3-5分钟就看完了、就学会掌握了,而我却要花2-3个小时的时间来完成,也许只有用心写过文章的人才能体会,希望大家能够相互体谅!

也曾经有人对我说,我写的东西太初级,都是入门级的东西。好吧,我承认众口难调,很难满足所有的读者,再加上我自己也只是个新手,一个4月前才听说微信公众平台这个词的初学者,谢谢你们以不同方式对我的激励,我会更加努力的!

第9篇文章介绍了QQ表情的发送与接收。在此之后,很多朋友问我如何发emoji表情(微信上叫符号表情),也就让我有了写这篇文章的决心。在此之前,我在网上进行了大量的搜索,发现根本没有介绍这方面的文章,并且在微信公众帐号开发官方交流群里提问,也少有人知道该如何发送emoji表情。今天,就让我们一起来揭开它的神秘面纱!

文章概要

本文重点介绍如何在微信公众帐号开发模式下,通过程序代码向用户发送符号表情。至于如何识别用户发送的是符号表情,就不在此讲解了,留给大家一点学习思考的空间。我只是给大家一个提示:用户向公众帐号发送符号表情,其实也是一条文本消息,这与QQ表现是一样的,即然是文本消息,将接收的符号表情内容打印到日志,不就知道每个表情对应的文本了吗?呵呵,当然也没有这么简单,并不是像其他文本消息,这里需要对接收到符号表情消息先做编码的转换。好了,就提示这么多。

认识符号表情

在公众帐号的主交互界面,窗口底部的输入框旁边有一个笑脸的图片按钮,点击它将会弹出表情选择界面,可选择的表情依次为“QQ表情”、“符号表情”和“动画表情”,我们选择“符号表情”,将会看到如下图所示界面:

可以持看出,相比QQ表情,符号表情要更加实用。为什么这么说呢?因为QQ表情大都是脸部表情,而符号表情除了脸部表情外,还有很多与生活息息相关的表情,例如:动物、花朵、树木、电视、电话、电脑、吉它、球类、交通工具等等。如果能在消息中使用符号表情,会不会显得更加生动、有趣呢?

再来看看小q机器人中使用符号表情的效果,先上两张图:

  

左边截图是小q机器人的主菜单,在Q友圈文字旁边的那个表情就是符号表情,是一女一男两人小朋友,示意着在Q友圈里可以结识到更多的朋友,不要想歪了,^_^。右边截图是人脸识别功能的使用指南,里面的“相机”、“鬼脸”也是符号表情,这样看上去是不是更加有趣味性呢?如果是纯文本,一定会显得太单调、太枯燥了。

Emoji表情的分类

Emoji表情有很多种版本,包括Unified、DoCoMo、KDDI、Softbank和Google,而且不同版本的表情代码也不一样,更可恶的是:不同的手机操作系统、甚至是同一操作系统的不同版本所支持的emoji表情又不一样。所以,完美主义者可以止步了,因为目前emoji表情并不能保证在所有终端上都能正常使用。

庆幸的是,我已经在超过10余部终端上测试过emoji表情的使用,这其中包括iPhone 4S、iPhone 5、Android 2.2、Android 4.0+、Win8、iPad2,只有极个别终端上显示不出来或显示为一个小方格,所以并没有什么太大的影响,也就可以放心使用了!

Emoji表情代码表之Unified版本

上面介绍的几种版本的emoji表情,都是通过unicode编码来表示的。换言之,不同版本的emoji表情对应的unicode编码值也不一样。本篇文章,我先给出Unified版本emoji表情的代码表,如下图所示:

公众帐号如何向用户发送emoji表情

上面已经给出了emoji表情的unified unicode代码对照表,那么这些代码要如何使用,才能发送出对应的emoji表情呢?如果你只是简单的像使用QQ表情代码那样,直接在文本消息的Content里写emoji表情代码,一定是会原样显示的。

这里需要用到一个Java方法做转换处理,方法的代码如下:

/*** emoji表情转换(hex -> utf-16)* * @param hexEmoji* @return*/
public static String emoji(int hexEmoji) {return String.valueOf(Character.toChars(hexEmoji));
}

方法说明:例如,“自行车”的unicode编码值为U+1F6B2,如果我们要在程序代码中使用“自行车”这个emoji表情,需要这样使用:

String bike = String.valueOf(Character.toChars(0x1F6B2));

其实前面那个emoji()方法就是对上面这行代码做了个简单的封装而以。现在知道如何使用emoji表情代码了吧,其实就是将代码表中的U+替换为0x,再调用emoji方法进行转换,将转换后的结果放在文本消息的Content中,返回给用户就会显示emoji表情了。

下面,我给出一个使用emoji表情的完整示例,如下:

package org.liufeng.course.service;import java.util.Date;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.liufeng.course.message.resp.TextMessage;
import org.liufeng.course.util.MessageUtil;/*** 核心服务类* * @author liufeng* @date 2013-05-20*/
public class CoreService {/*** 处理微信发来的请求* * @param request* @return*/public static String processRequest(HttpServletRequest request) {String respMessage = null;try {// xml请求解析Map<String, String> requestMap = MessageUtil.parseXml(request);// 发送方帐号(open_id)String fromUserName = requestMap.get("FromUserName");// 公众帐号String toUserName = requestMap.get("ToUserName");// 回复文本消息TextMessage textMessage = new TextMessage();textMessage.setToUserName(fromUserName);textMessage.setFromUserName(toUserName);textMessage.setCreateTime(new Date().getTime());textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);textMessage.setFuncFlag(0);textMessage.setContent("自行车" + emoji(0x1F6B2) + " 男性" + emoji(0x1F6B9) + " 钱袋" + emoji(0x1F4B0));respMessage = MessageUtil.textMessageToXml(textMessage);} catch (Exception e) {e.printStackTrace();}return respMessage;}/*** emoji表情转换(hex -> utf-16)* * @param hexEmoji* @return*/public static String emoji(int hexEmoji) {return String.valueOf(Character.toChars(hexEmoji));}
}

上面代码的作用是:不管用户发送什么类型的消息,都返回包含三个emoji表情的文本消息。如果不明白CoreService类怎么回事,请查看本系列教程的第5篇,或者你只需要认真看第42行代码,就知道怎么样把emoji表情代码放在文本消息的Content中了。最后再来看下运行效果截图:

本篇文章要讲的内容就至此结束了,但关于emoji表情的讲解还没有结束,为什么这么说呢?请仔细看本篇文章的第二张截图,也就是小q机器人的文本菜单,里面用到的emoji表情在本文给出的emoji代码表里根本找不到(微信上的emoji表情与代码表中完全一致),那这个emoji表情又是如何发送的呢,请听下回分解!

如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号xiaoqrobot来支持柳峰哦!

转帖请注明本文出自柳峰的博客(http://blog.csdn.net/lyq8479),请尊重他人的辛勤劳动成果,谢谢!

转载于:https://my.oschina.net/crossbell/blog/277783

[11] 微信公众帐号开发教程第11篇-符号表情的发送(上)相关推荐

  1. 微信公众帐号开发教程第12篇-符号表情的发送(下)

    引言及文章概要 第11篇文章给出了Unified版本的符号表情(emoji表情)代码表,并且介绍了如何在微信公众帐号开发模式下发送emoji表情,还在文章结尾出,卖了个关子:"小q机器人中使 ...

  2. [036] 微信公众帐号开发教程第12篇-符号表情的发送(下)

    引言及文章概要 第11篇文章给出了Unified版本的符号表情(emoji表情)代码表,并且介绍了如何在微信公众帐号开发模式下发送emoji表情,还在文章结尾出,卖了个关子:"小q机器人中使 ...

  3. [012] 微信公众帐号开发教程第12篇-符号表情的发送(下)

    引言及文章概要 第11篇文章给出了Unified版本的符号表情(emoji表情)代码表,并且介绍了如何在微信公众帐号开发模式下发送emoji表情,还在文章结尾出,卖了个关子:"小q机器人中使 ...

  4. 微信公众帐号开发教程第9篇-QQ表情的发送与接收

    我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是如何在微信公众平台使用QQ表情, ...

  5. [033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收

    我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是如何在微信公众平台使用QQ表情, ...

  6. 微信公众帐号开发教程第16篇-应用实例之历史上的今天

    内容概要 本篇文章主要讲解如何在微信公众帐号上实现"历史上的今天"功能.这个例子本身并不复杂,但希望通过对它的学习,读者能够对正则表达式有一个新的认识,能够学会运用现有的网络资源丰 ...

  7. 微信公众帐号开发教程第6篇-消息及消息处理工具的封装

    本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用  官方文档 接下来要做的就是将消息请求.回复中定义的消息进行封装,建立与之对应的Java类(Java是一门面向 ...

  8. 微信公众帐号开发教程第1篇-引言(转)

    接触微信公众帐号已经有两个多月的时间了,在这期间,除了陆续完好个人公众帐号xiaoqrobot以外,还带领团队为公司开发了两个企业应用:一个是普通类型的公众帐号,还有一个是会议类型的公众帐号.经过这3 ...

  9. 微信公众帐号开发教程第13篇-图文消息全攻略

    引言及内容概要 已经有几位读者抱怨"柳峰只用到文本消息作为示例,从来不提图文消息,都不知道图文消息该如何使用",好吧,我错了,原本以为把基础API封装完.框架搭建好,再给出一个文本 ...

最新文章

  1. BZOJ 2190: [SDOI2008]仪仗队
  2. 网络服务-DNS 域名系统服务
  3. Orchard模块开发全接触3:分类的实现及内容呈现(Display)
  4. uva 10453 - Make Palindrome(dp)
  5. 多个Google账户合并(共享)数据
  6. 微服务架构之外的选择——基于服务架构
  7. 大佬都在用的桑基图到底怎么做?告诉你个最简单的方法
  8. apache负载均衡 健康检查_Nginx负载均衡之健康检查
  9. 硬派SUV坦克500撞色款预计年底上市
  10. 计算机网络知识点总结谢,《计算机网络基础》复习提纲_谢(5)版-课堂教案
  11. 利用脚本设置本机IP地址
  12. 理解乐观锁、悲观锁、共享锁、排他锁、表锁、行锁
  13. firefox插件使用
  14. 塔吊安全智能监控系统智慧工地整体解决方案
  15. python3 数据挖掘 之 爬取 智联招聘网站来巩固pandas
  16. 鸿蒙系统手机开机,华为手机鸿蒙系统 OS 2.0 开机界面演示
  17. hdu3709——数位dp+枚举
  18. 数字电路为什么是低电平有效的多
  19. 千瓜小红书直播达人、笔记排行榜
  20. 魅族Android7.0刷机包,乐视X900+安卓7.1.2 魅族Flyme6刷机包 最新6.8.3.17R版 紫火20180510更新...

热门文章

  1. 题朋友云南骑马照【明书、圣契】
  2. 双目 机器视觉-- 测距
  3. vertica资源管理
  4. Wannafly挑战赛29-御坂美琴(递归模拟)
  5. Python版实现12306抢票功能,真的能帮你抢到春运回家的票吗?
  6. 华为eNsp S5700组网配置
  7. 各种手机的User-Agent
  8. HTML标签-排版标签、媒体标签、列表标签、表格标签、表单标签、语义化标签、字符实体
  9. AutoJs学习-录制手指动作
  10. matplotlib plot画图不弹框