zoukankan      html  css  js  c++  java
  • Java 解决Emoji表情过滤问题

    Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。

    原因:

    UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。

    方法1.将已经建好的表也转换成utf8mb4

    2,写个工具类:过滤掉emoji表情符号


    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>

    如果帮助到你,给点鼓励点个推荐吧亲

  • 相关阅读:
    第三次上机练习
    第三次作业
    第二次上级练习
    第二次作业
    第一次上机练习
    第一次作业
    4.20
    4.16
    4.10
    4.9
  • 原文地址:https://www.cnblogs.com/shenhaha520/p/10234742.html
Copyright © 2011-2022 走看看