热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[035]微信公众帐号开发教程第11篇符号表情的发送(上)(转)

题外话(能够略过)

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

 

也以前有人对我说,我写的东西太0基础,都是入门级的东西。好吧,我承认众口难调,非常难满足全部的读者,再加上我自己也仅仅是个新手,一个4月前才听说微信公众平台这个词的刚开始学习的人,谢谢你们以不同方式对我的激励,我会更加努力的!

 

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

 

文章概要

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

 

认识符号表情

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

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

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

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

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

左边截图是小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表情的代码表,例如以下图所看到的:

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

 

公众帐号怎样向用户发送emoji表情

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

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

[java] view plaincopy
 
  1. /** 
  2.  * emoji表情转换(hex -> utf-16) 
  3.  *  
  4.  * @param hexEmoji 
  5.  * @return 
  6.  */  
  7. public static String emoji(int hexEmoji) {  
  8.     return String.valueOf(Character.toChars(hexEmoji));  
  9. }  

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

[java] view plaincopy
 
  1. String bike = String.valueOf(Character.toChars(0x1F6B2));  

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

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

[java] view plaincopy
 
  1. package org.liufeng.course.service;  
  2.   
  3. import java.util.Date;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7.   
  8. import org.liufeng.course.message.resp.TextMessage;  
  9. import org.liufeng.course.util.MessageUtil;  
  10.   
  11. /** 
  12.  * 核心服务类 
  13.  *  
  14.  * @author liufeng 
  15.  * @date 2013-05-20 
  16.  */  
  17. public class CoreService {  
  18.     /** 
  19.      * 处理微信发来的请求 
  20.      *  
  21.      * @param request 
  22.      * @return 
  23.      */  
  24.     public static String processRequest(HttpServletRequest request) {  
  25.         String respMessage = null;  
  26.         try {  
  27.             // xml请求解析  
  28.             Map requestMap = MessageUtil.parseXml(request);  
  29.   
  30.             // 发送方帐号(open_id)  
  31.             String fromUserName = requestMap.get("FromUserName");  
  32.             // 公众帐号  
  33.             String toUserName = requestMap.get("ToUserName");  
  34.   
  35.             // 回复文本消息  
  36.             TextMessage textMessage = new TextMessage();  
  37.             textMessage.setToUserName(fromUserName);  
  38.             textMessage.setFromUserName(toUserName);  
  39.             textMessage.setCreateTime(new Date().getTime());  
  40.             textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);  
  41.             textMessage.setFuncFlag(0);  
  42.             textMessage.setContent("自行车" + emoji(0x1F6B2) + " 男性" + emoji(0x1F6B9) + " 钱袋" + emoji(0x1F4B0));  
  43.             respMessage = MessageUtil.textMessageToXml(textMessage);  
  44.         } catch (Exception e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.   
  48.         return respMessage;  
  49.     }  
  50.   
  51.     /** 
  52.      * emoji表情转换(hex -> utf-16) 
  53.      *  
  54.      * @param hexEmoji 
  55.      * @return 
  56.      */  
  57.     public static String emoji(int hexEmoji) {  
  58.         return String.valueOf(Character.toChars(hexEmoji));  
  59.     }  
  60. }  

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

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

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

 

假设认为文章对你有所帮助,请通过留言或关注微信公众帐号xiaoqrobot来支持柳峰哦!

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

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


推荐阅读
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在需要对iPhone进行全面备份时,有时会遇到电脑无法识别设备的情况。本文将详细分析导致这一问题的可能原因,并提供有效的解决方案。 ... [详细]
  • 基于Web的Kafka管理工具Kafkamanager首次访问Web界面的详细配置指南(附图解)
    首次访问Kafkamanager Web界面时,需要对Kafka集群进行配置。这一过程相对简单,用户只需依次点击【Cluster】>【Add Cluster】,按照提示完成相关设置即可。本文将通过图文并茂的方式,详细介绍每一步的配置步骤,帮助用户快速上手Kafkamanager。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文介绍了一种简化版的在线购物车系统,重点探讨了用户登录和购物流程的设计与实现。该系统通过优化界面交互和后端逻辑,提升了用户体验和操作便捷性。具体实现了用户注册、登录验证、商品浏览、加入购物车以及订单提交等功能,旨在为用户提供高效、流畅的购物体验。 ... [详细]
author-avatar
手机用户2602930391
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有