java emoji表情處理
原文地址:https://blog.csdn.net/eson_15/article/details/81953720
在之前做部落格,測試編輯部落格和評論功能時,發現如果輸入了emoji表情的話,無法插入資料庫,會報錯型別不匹配的錯誤。後來在網上找了很多解決辦法,最後發現github上有個很牛逼的輕量級開源工具叫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。