mysql數據庫表情處理


 

一、問題產生的原因

mysql數據庫用的編碼是utf8_general_ci,就是utf-8編碼,結果也就報錯誤了。

 

為什么會出現這種原因?

因為mysql的utf8編碼的一個字符最多3個字節,但是一個emoji表情為4個字節,所以utf8不支持存儲emoji表情。但是utf8的超集utf8mb4一個字符最多能有4字節,所以能支持emoji表情的存儲。

 

二、解決方法

解決方法之一

把你的數據庫編碼集設置為utf8mb4,無論是數據庫還是表,還是字段。雖然會增加存儲,但是這個可以忽略不計。

解決方法之二

有句話說得好,問題來了要么解決要么折中解決。如果有些原因你不能修改數據庫編碼之類的,你可以用java的一些插件,如emoji-java這種emoji表情插件對表情進行特殊處理,然后保存或者去掉表情,這也是一種解決方法

引入包:

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

 

測試

public class Test {
    public static void main(String[] args) {
        String str = "Here is a boy: 👦🏿!";
        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));
	}
}

  

還原:

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

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

 

附:

某些表情符號支持使用Fitzpatrick修飾符,該修飾符可在5種色調之間進行選擇:

修飾符 類型
🏻 類型_1_2
🏼 type_3
🏽 type_4
🏾 type_5
🏿 type_6

 

EmojiManager

EmojiManager提供一些靜態方法通過表情符號,數據庫搜索:

  • getForTag 返回給定標簽的所有表情符號
  • getForAlias 返回別名的表情符號
  • getAll 返回所有表情符號
  • isEmoji 檢查字符串是否是表情符號
  • containsEmoji 檢查字符串是否包含表情符號

您還可以查詢元數據:

  • getAllTags 返回可用標簽

或得到一切:

  • getAll 返回所有表情符號

表情符號模型

Emoji 是一個POJO(普通的Java對象),它提供以下方法:

  • getUnicode 返回表情符號的unicode表示形式
  • getUnicode(Fitzpatrick)使用提供的Fitzpatrick修飾符返回表情符號的unicode表示形式。如果表情符號不支持Fitzpatrick修飾符,則此方法將拋出UnsupportedOperationException如果提供的Fitzpatrick為null,則此方法將返回表情符號的unicode。
  • getDescription 返回表情符號的(可選)描述
  • getAliases 返回此表情符號的別名列表
  • getTags 返回此表情符號的標簽列表
  • getHtmlDecimal 返回表情符號的html十進制表示形式
  • getHtmlHexadecimal 返回表情符號的html十進制表示形式
  • supportsFitzpatrick 如果表情符號支持Fitzpatrick修飾符,則返回true;否則返回false

 

 

部分摘錄自:http://www.itcodai.com/blog/26


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM