• 【微信公众号开发】【5】文本消息加强


    前言:

    1,当发送的文本消息内容过长时,微信将不做任何响应

    2,换行符的使用

    3,网页超链接

    4,QQ表情的发送与接收

    5,符号表情的发送与接收(emoji表情)(以后会补充引入jar包处理——TODO:EmojiParser)

    6,解析接口中的消息创建时间CreateTime

    7,柳峰老师的博客链接(http://blog.csdn.net/lyq8479/article/category/1366622/2

    正文:

    1,文本消息的长度(接口文档中对消息长度限制为2048)

    很多人测试反应消息内容长度在1300多字节时,微信就不响应了,主要是计算文本长度的方式问题,对于不同的编码方式,中文所占的字节数也不一样!

    微信服务器返回消息时,该采用UTF-8编码方式 (二、四章均有提及,coreServlet post 方法)

      // 将请求、响应的编码均设置为UTF-8(防止中文乱码)  
    
      request.setCharacterEncoding("UTF-8");  
    
      response.setCharacterEncoding("UTF-8");  

    2,换行符

    微信公众帐号的文本消息中,换行符仍然是“ ”

    3,网页超链接

    错误用法1(a标签的href属性值未被引号引起):<a href=http://blog.csdn.net/lyq8479>柳峰的博客</a> 

    错误用法2(a标签的href属性值被单引号引起):<a href='http://blog.csdn.net/lyq8479'>柳峰的博客</a>

    在做Web开发时,以上两种写法都是可以的,但是放在微信公众帐号的文本消息中,这两种写法都是错误的,网页超链接并不会起作用,而且在Android手机上还会将HTML代码原样显示出来

    正确的用法是将a标签href属性的值用双引号引起  : <href="http://blog.csdn.net/lyq8479">柳峰的博客</a

    4,QQ表情的发送与接收

    QQ表情=文本消息

    向用户发送QQ表情:textMessage.setContent("[难过] /难过 /::("); 

    识别用户发送的QQ表情:

    public static boolean isQqFace(String content) {  
        boolean result = false;  
      
        // 判断单个及多个QQ表情的正则表达式  
        String qqfaceRegex = "(/::\)|/::~|/::B|/::\||/:8-\)|/::<|/::$|/::X|/::Z|/::'\(|/::-\||/::@|/::P|/::D|/::O|/::\(|/::\+|/:--b|/::Q|/::T|/:,@P|/:,@-D|/::d|/:,@o|/::g|/:\|-\)|/::!|/::L|/::>|/::,@|/:,@f|/::-S|/:\?|/:,@x|/:,@@|/::8|/:,@!|/:!!!|/:xx|/:bye|/:wipe|/:dig|/:handclap|/:&-\(|/:B-\)|/:<@|/:@>|/::-O|/:>-\||/:P-\(|/::'\||/:X-\)|/::\*|/:@x|/:8\*|/:pd|/:<W>|/:beer|/:basketb|/:oo|/:coffee|/:eat|/:pig|/:rose|/:fade|/:showlove|/:heart|/:break|/:cake|/:li|/:bome|/:kn|/:footb|/:ladybug|/:shit|/:moon|/:sun|/:gift|/:hug|/:strong|/:weak|/:share|/:v|/:@\)|/:jj|/:@@|/:bad|/:lvu|/:no|/:ok|/:love|/:<L>|/:jump|/:shake|/:<O>|/:circle|/:kotow|/:turn|/:skip|/:oY|/:#-0|/:hiphot|/:kiss|/:<&|/:&>){1,}";  
        Pattern p = Pattern.compile(qqfaceRegex);  
        Matcher m = p.matcher(content);  
        if (m.matches()) {  
            result = true;  
        }  
        return result;  
    }  

    5,符号表情的发送与接收

    Emoji表情有很多种版本,包括Unified、DoCoMo、KDDI、Softbank和Google,而且不同版本的表情代码也不一样,更可恶的是:不同的手机操作系统、甚至是同一操作系统的不同版本所支持的emoji表情又不一样。不过目前大部分是没有影响的,柳峰老师提供的是Unified版本。

    向用户发送emoji表情: 其中hexEmoji=0x1F604(将代码表中的U+替换为0x)

    public static String emoji(int hexEmoji) {  
        return String.valueOf(Character.toChars(hexEmoji));  
    }  

    发送在微信符号表情选择栏中不存在的emoji表情:要知道对应的unicode码;SoftBank版的符号表情直接发送即可

    6,解析接口中的消息创建时间CreateTime

    消息接口中定义的消息创建时间CreateTime,它表示1970年1月1日0时0分0秒至消息创建时所间隔的秒数,注意是间隔的秒数,不是毫秒数!

    1秒=1000毫秒

    public static String formatTime(String createTime) {  
        // 将微信传入的CreateTime转换成long类型,再乘以1000  
        long msgCreateTime = Long.parseLong(createTime) * 1000L;  
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        return format.format(new Date(msgCreateTime));  
    } 
  • 相关阅读:
    Redis涉及的概念
    Redis高级教程
    Redis基础入门
    Java多线程面试题
    Java集合面试题
    Java集合基础
    Java基础面试题总结
    Zookeeper Basics
    GitLab基础入门
    阿里云ECS服务器Docker安装Tomcat过程记录
  • 原文地址:https://www.cnblogs.com/huashengweilong/p/7716646.html
Copyright © 2020-2023  润新知