关于java过滤微信emoji表情的问题解决方法

原创 2015年11月18日 14:34:46
由于网上某个版本存在bug,以下是将bug修复过的版本,仅供参考

public class EmojiFilter {
/**
     * 检测是否有emoji字符
     * @param source 需要判断的字符串
     * @return 一旦含有就抛出
     */
    public static boolean containsEmoji(String source) {
        int len = source.length();
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (!notisEmojiCharacter(codePoint)) {
            //判断确认有表情字符
            return true;
            }
        }
        return false;
    }


    /**
     * 非emoji表情字符判断
     * @param codePoint
     * @return
     */
    private static boolean notisEmojiCharacter(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 (!containsEmoji(source)) {
            return source;//如果不包含,直接返回
        }
        
        StringBuilder buf = null;//该buf保存非emoji的字符
        int len = source.length();
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (notisEmojiCharacter(codePoint)) {
                if (buf == null) {
                    buf = new StringBuilder(source.length());
                }
                buf.append(codePoint);
            } 
        }
        
        if (buf == null) {        
            return "";//如果没有找到非emoji的字符,则返回无内容的字符串
        } else {
            if (buf.length() == len) {
                buf = null;
                return source;
            } else {
                return buf.toString();
            }
        }
    }
    
}

相关文章推荐

java 判断字符串中是否包含emoj表情及过滤,完美解决。

最近遇到一个很蛋疼的问题,用户如果在客户端输入表情可能会引起一些报错,在查了一些资料后发现很多坑人的代码,我在总结了之后给出了一个比较完美的版本。 亲测可以判断绝大多数表情。 package com....

【异常处理】Incorrect string value: '\xF0\x90\x8D\x83...' for column... Emoji表情字符过滤的Java实现

Emoji表情字符现在在APP已经广泛支持了。但是Mysql的UTF8编码对Emoji字符的支持却不是那么好。所以我们经常会遇到这样的异常: Incorrect string value: '\xF...
  • shootyou
  • shootyou
  • 2015年04月03日 11:09
  • 23666

java字符串中Emoji表情处理

在爬虫获取字符串内容时,遇到内容中有手机表情,存入数据库是报错!网上找了半天,发现好多人不去实验一下就复制别人的代码网上发,然后导致我拿来用直接不行。最终找到一个可以行办法,在此总结一下: 方法主要...

过滤字符串中的Emoji表情

iOS 5.0之前,苹果都是采用3个字节来承接emoji表情,Java的普通char可以支持显示。但iOS 5.0之后,苹果升级了系统自带的emoji表情输入法,用的Unicode 6标准来统一,是采...
  • swpihchj
  • swpihchj
  • 2013年09月08日 21:39
  • 27423

java使用unicode过滤emoji表情

最近搞个微信公众号的项目,如果微信用户名有表情符号的,那么在我们的系统里面就会保存不了。最初的解决方案是把数据库的utf8格式改为utf8mb4。这样就能兼容保存emoji表情符号,后面又发现,保存的...

java 过滤 emoji 表情

获取微信的个人信息时,如果用户设置有表情的昵称,存数据库里会有16进制的形式,这样,例如mysql 就会报错, 我是将表情替换成空字符串, 如果最后是空的,则最生再生成6位数的字符串,作为用户昵称。 ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java过滤微信中Emoji表情

最近做微信项目,发现获取微信用户的昵称时候总有乱码,后来发现是Emoji表情不能解析。 解决办法: 过滤字符串中的Emoji表情,后续可能加载Emoji表情库,同步显示Emoji表情。 repl...

java过滤utf8mb4表情符号

一、mysql设置utf8mb4 二、java过滤表情符

java 判断字符串中是否包含emoj表情及过滤。

package com.luo.dtqjh.utils; import org.apache.commons.lang.StringUtils; public class Emoj...
  • FYWT98
  • FYWT98
  • 2017年01月04日 17:59
  • 1175
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于java过滤微信emoji表情的问题解决方法
举报原因:
原因补充:

(最多只允许输入30个字)