Java 解決Emoji表情過濾問題(轉載)

本文做者 我是周洲java

原文連接 https://blog.csdn.net/u012904383/article/details/79376707git

本人使用的是第三種引入jar的方法sql

 

問題:app

    Emoji表情從三方數據中獲取沒有過濾,致使存入DB的時候報錯。工具

 

 

緣由:ui

UTF-8編碼有多是兩個、三個、四個字節。Emoji表情是4個字節,而Mysql的utf8編碼最多3個字節,因此數據插不進去。編碼

 

解決方案:spa

1.將已經建好的表也轉換成utf8mb4,這個方法不可行,有的時候就不靈了。.net

2,寫個工具類:過濾掉emoji表情符號code

public class EmojiFilter {
   
 
    private static boolean isEmojiCharacter(char codePoint) {
        return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
                || (codePoint == 0xD)
                || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
                || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
                || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
    }
 
    /**
     * 過濾emoji 或者 其餘非文字類型的字符
     *
     * @param source
     * @return
     */
    public static String filterEmoji(String source) {
        if (StringUtils.isBlank(source)) {
            return source;
        }
        StringBuilder buf = null;
        int len = source.length();
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (isEmojiCharacter(codePoint)) {
                if (buf == null) {
                    buf = new StringBuilder(source.length());
                }
                buf.append(codePoint);
            }
        }
        if (buf == null) {
            return source;
        } else {
            if (buf.length() == len) {
                buf = null;
                return source;
            } else {
                return buf.toString();
            }
        }
    }

 


3,使用別人封裝的一個類,專門解決emoji問題的。這個在git上有開源的代碼。在pom工程中引入

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

 

直接就能夠在代碼中使用了。

EmojiParser.removeAllEmojis(str)
這個方法能夠過濾掉字符串內的emoji表情。

 

————————————————版權聲明:本文爲CSDN博主「我是周洲」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/zhou2s_101216/article/details/79376707

相關文章
相關標籤/搜索