电竞比分网-中国电竞赛事及体育赛事平台

分享

java Mysql 存儲(chǔ)emoji表情解決方案

 quasiceo 2018-08-19

在進(jìn)行Mysql 存儲(chǔ)的時(shí)候,發(fā)現(xiàn)在保存帶有emoji表情的時(shí)候,保存失敗,錯(cuò)誤信息為:

這里寫圖片描述

出現(xiàn)的原因

  • 經(jīng)過網(wǎng)上查閱發(fā)現(xiàn),mysql字符集大多數(shù)使用的是utf8,而mysql的utf8編碼的一個(gè)字符最多3個(gè)字節(jié),但是一個(gè)emoji表情為4個(gè)字節(jié),所以u(píng)tf8不支持存儲(chǔ)emoji表情。但是utf8的超集utf8mb4一個(gè)字符最多能有4字節(jié),所以能支持emoji表情的存儲(chǔ),并且兼容utf8

觖決方法

  • 方法一
    • 修改數(shù)據(jù)庫編碼集設(shè)置為utf8mb4,無論是數(shù)據(jù)庫還是表,還是字段
  • 方法二
    • 如果有些原因你不能修改數(shù)據(jù)庫編碼或者其他原因,有一個(gè)插件可以幫到你,我也是用這種方式處理的,emoji-java這個(gè)類庫,它可以幫你去掉表情,或者以其他可以存儲(chǔ)的字符來代替emoji表情,話不多說,看代碼:

  • 首先加入依賴

    這里寫圖片描述

  • 存儲(chǔ)過程中的中文示例:

這里寫圖片描述


  • 下面是利用emoji-java類庫的代碼片斷:
public static void main(String[] args) {
        Map map = new HashMap();
        map.put("name", "\ud83d\ude04正常中文\ud83d\ude04");
        map.put("name2", "\ud83d\ude0d\u8c22\ud83d\ude0d");
        map.put("desc", "其他");
        JSONObject json = (JSONObject) JSON.toJSON(map);
        System.out.println("帶有emoji表情的字符串打印效果: " + json.toString());
        System.out.println("去掉emoji表情的字符串打印效果: " + EmojiParser.removeAllEmojis(json.toString()));
        System.out.println("將emoji表情轉(zhuǎn)換成別名的形式: " + EmojiParser.parseToAliases(json.toString()));
        System.out.println("將emoji表情轉(zhuǎn)換成html十進(jìn)制表示: " + EmojiParser.parseToHtmlDecimal(json.toString()));
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 運(yùn)行結(jié)果為:

這里寫圖片描述


從運(yùn)行結(jié)果可以看出,emoji-java類庫很好的處理了emoji表情字符串的處理,到此結(jié)束。

有什么問題大家可以留言

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多