天天看點

[035] 微信公衆帳号開發教程第11篇-符号表情的發送(上)(轉)

相信這篇文章已經讓大家等的太久了,不是我故弄玄虛、吊大家胃口,而是寫一篇文章真的須要花太多的時間。或許一篇文章,你們花3-5分鐘就看完了、就學會掌握了,而我卻要花2-3個小時的時間來完成,或許唯獨用心寫過文章的人才幹體會,希望大家能夠互相體諒!

也以前有人對我說,我寫的東西太0基礎,都是入門級的東西。好吧,我承認衆口難調,非常難滿足全部的讀者,再加上我自己也僅僅是個新手,一個4月前才聽說微信公衆平台這個詞的剛開始學習的人,謝謝你們以不同方式對我的激勵,我會更加努力的!

文章概要

本文重點介紹怎樣在微信公衆帳号開發模式下,通過程式代碼向使用者發送符号表情。至于怎樣識别使用者發送的是符号表情,就不在此解說了,留給大家一點學習思考的空間。我僅僅是給大家一個提示:使用者向公衆帳号發送符号表情,事實上也是一條文本消息,這與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方法做轉換處理,方法的代碼例如以下:

/** 

 * 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 

    public static String emoji(int hexEmoji) {  

        return String.valueOf(Character.toChars(hexEmoji));  

上面代碼的作用是:無論使用者發送什麼類型的消息,都傳回包含三個emoji表情的文本消息。假設不明确CoreService類怎麼回事,請檢視本系列教程的第5篇,或者你僅僅須要認真看第42行代碼,就知道怎麼樣把emoji表情代碼放在文本消息的Content中了。最後再來看下執行效果截圖:

[035] 微信公衆帳号開發教程第11篇-符号表情的發送(上)(轉)

本篇文章要講的内容就至此結束了,但關于emoji表情的解說還沒有結束,為什麼這麼說呢?請細緻看本篇文章的第二張截圖,也就是小q機器人的文本菜單,裡面用到的emoji表情在本文給出的emoji代碼表裡根本找不到(微信上的emoji表情與代碼表中全然一緻),那這個emoji表情又是怎樣發送的呢,請聽下回分解!