1. 程式人生 > >java emoji表情處理

java emoji表情處理

原文地址:https://blog.csdn.net/eson_15/article/details/81953720

在之前做部落格,測試編輯部落格和評論功能時,發現如果輸入了emoji表情的話,無法插入資料庫,會報錯型別不匹配的錯誤。後來在網上找了很多解決辦法,最後發現github上有個很牛逼的輕量級開源工具叫emoji-java。

github地址:https://github.com/vdurmont/emoji-java

基本使用方法在github的README檔案裡有說明,不過是英文的,我簡單研究了一下,在這做一個簡單的總結。

1. 獲取maven依賴

目前該工具最新版本是4.0.0,依賴如下:

<dependency>
  <groupId>com.vdurmont</groupId>
  <artifactId>emoji-java</artifactId>
  <version>4.0.0</version>
</dependency>

2. 使用方法

我們使用該工具類,主要用其兩個功能,一是將emoji表情轉換成可以儲存到資料庫的字元,二是取出來後,將相應的字元再轉換成emoji表情給前端來展示。

2.1 將表情轉換成對應別名字元(to aliases)

轉換成字元別名,使用以下兩種方法即可。

EmojiParser.parseToAliases(str); 直接轉換
EmojiParser.parseToAliases(str, FitzpatrickAction); 帶修改器的轉換,修改器可以指定不同的樣式

我們使用一個字串測試一下:

Here is a boy: :boy|type_6:!

public class Test {
    public static void main(String[] args) {
        String str = "Here is a boy: :boy|type_6:!";
        System.out.println("原始字元為:\n"
+ str); System.out.println("to aliases 之後:"); System.out.println(EmojiParser.parseToAliases(str)); System.out.println(EmojiParser.parseToAliases(str, EmojiParser.FitzpatrickAction.PARSE)); System.out.println(EmojiParser.parseToAliases(str, EmojiParser.FitzpatrickAction.REMOVE)); System.out.println(EmojiParser.parseToAliases(str, EmojiParser.FitzpatrickAction.IGNORE)); } }

打印出的結果為:

2.2 將表情轉換成html(to html)

轉換成html,可以使用如下,後者為十六進位制的表現方式。

EmojiParser.parseToHtmlDecimal(str); 直接轉換
EmojiParser.parseToHtmlHexadecimal(str); 直接轉換(十六進位制)
EmojiParser.parseToHtmlDecimal(str, FitzpatrickAction); 帶修改器的轉換

我們還使用上面字串測試一下:

public class Test {
    public static void main(String[] args) {
        String str = "Here is a boy: :boy|type_6:!";
        System.out.println("原始字元為:\n" + str);

        System.out.println("to html:");
        System.out.println(EmojiParser.parseToHtmlDecimal(str));
        System.out.println(EmojiParser.parseToHtmlDecimal(str, EmojiParser.FitzpatrickAction.PARSE));
        System.out.println(EmojiParser.parseToHtmlDecimal(str, EmojiParser.FitzpatrickAction.REMOVE));
        System.out.println(EmojiParser.parseToHtmlDecimal(str, EmojiParser.FitzpatrickAction.IGNORE));

        System.out.println("to html(hex):");
        System.out.println(EmojiParser.parseToHtmlHexadecimal(str));
    }
}

打印出的結果可以自己測試一下。

2.3 再次轉換回表情

經過轉換之後的字元就可以存到資料庫了, 那麼從資料庫中取出來後,將字元還原成emoji表情使用如下方法即可。

EmojiParser.parseToUnicode(str);

public class Test {
    public static void main(String[] args) {
        String str = "Here is a boy: :boy|type_6:!";
        System.out.println("原始字元為:\n" + str);

        System.out.println("to html:");
        String s = EmojiParser.parseToHtmlDecimal(str);
        System.out.println(s);

        System.out.println("還原:");
        System.out.println(EmojiParser.parseToUnicode(s));
    }
}

打印出結果可以自己測試一下。
當然了,這個工具還有其他方法,比如去除所有emoji表情,獲取所有emoji表情等等,具體的可以看一下github上的README文件。
不過這個工具還有個問題,如果是用markdown編輯的,在程式碼塊內部出現emoji表情的話,我測試過是轉換不了的。所以該工具還需要作者進一步優化,回頭我去給他們提個issue。