使用:
EmojiFilter.filterEmoji(weiUserInfo.getNickname());

过滤特殊字符代码

过滤emoji(表情) 或者 其他非文字类型的字符


/*** 过滤emoji表情与非emoji表情* @author suzhenwei**/
public class EmojiFilter {/*** 过滤emoji 或者 其他非文字类型的字符* @param source 需要过滤的字符串* @return*/public static String filterEmoji(String source) {if (!containsEmoji(source)) {return source;}StringBuilder buf = null;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 "";} else {if (buf.length() == len) {buf = null;return source;} else {return buf.toString();}}}/*** 检测是否有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*/public 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));}
}

替换特殊字符的代码

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

import com.vdurmont.emoji.EmojiParser;
import org.apache.commons.lang.StringUtils;import java.util.List;/*** 表情处理工具** @Author: szw* @Date: 2020/9/15 11:27*/
public class FilterEmojiUtil extends EmojiParser {/*** 获取非表情字符串** @param input String* @return String*/public static String getNonEmojiString(String input) {int prev = 0;StringBuilder sb = new StringBuilder();List<EmojiParser.UnicodeCandidate> replacements = getUnicodeCandidates(input);for (EmojiParser.UnicodeCandidate candidate : replacements) {sb.append(input.substring(prev, candidate.getEmojiStartIndex()));prev = candidate.getFitzpatrickEndIndex();}return sb.append(input.substring(prev)).toString();}/*** 获取表情字符串** @param input String* @return String*/public static String getEmojiUnicodeString(String input) {EmojiParser.EmojiTransformer transformer = unicodeCandidate -> unicodeCandidate.getEmoji().getHtmlHexadecimal();StringBuilder sb = new StringBuilder();List<EmojiParser.UnicodeCandidate> replacements = getUnicodeCandidates(input);for (EmojiParser.UnicodeCandidate candidate : replacements) {sb.append(transformer.transform(candidate));}return parseToUnicode(sb.toString());}public static String getUnicode(String source) {String returnUniCode = null;String uniCodeTemp;for (int i = 0; i < source.length(); i++) {uniCodeTemp = "\\u" + Integer.toHexString(source.charAt(i));returnUniCode = returnUniCode == null ? uniCodeTemp : returnUniCode + uniCodeTemp;}return returnUniCode;}/*** emoji表情替换** @param source  原字符串* @param slipStr emoji表情替换成的字符串* @return 过滤后的字符串*/public static String filterEmoji(String source, String slipStr) {if (StringUtils.isNotBlank(source)) {return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", slipStr);} else {return source;}}/*** 判断是否包含emoji表情** @param source 原字符串*               // @param slipStr emoji表情替换成的字符串* @return 过滤后的字符串*/public static boolean checkEmoji(String source) {if (StringUtils.isNotBlank(source)) {return source.matches("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]");} else {return false;}}public static void main(String[] args) {String content = "带表情的\uD83D\uDE41\uD83D\uDE2B\uD83E\uDD14\uD83D\uDE10";System.out.println(getEmojiUnicodeString(content));//转换表情if (StringUtils.isNotBlank(getEmojiUnicodeString(content))) {String hexadecimal = EmojiParser.parseToHtmlHexadecimal(content);System.out.println(hexadecimal);//转换表情String interactContent = EmojiParser.parseToUnicode(hexadecimal);System.out.println(interactContent);}}
}

Java Url编码转换

public static String getURLEncoderString(String str) {String result = "";if (null == str) {return "";}try {result = java.net.URLEncoder.encode(str, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}public static String URLDecoderString(String str) {String result = "";if (null == str) {return "";}try {result = java.net.URLDecoder.decode(str, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}

Java过滤微信昵称特殊字符相关推荐

  1. java 过滤微信昵称_JAVA微信开发-如何保存包含特殊字符的微信昵称

    我们在做微信开发的时候,有一个很重要的就是通过openid获取用户的详细信息,包含昵称,头像,省,市,区的信息,但是现在移动时代,很多人追求个性,在名字当中大量使用火星文或者表情符.(本人实际测试过一 ...

  2. java过滤微信昵称emoji表情

    注:核心代码为转载 最近在开发中遇到要过滤掉微信名称中的表情,再入库的功能:在找了多篇实现验证后,发现排名在前的文章们竟然有bug,最终找到以下实现,验证后符合要求,特此记录一下. import ja ...

  3. java 过滤微信昵称_java过滤微信昵称emoji表情与非emoji的问题解决方法

    import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 过滤emoji表情与非emoji表情 * @author h ...

  4. mysql 存储微信昵称乱码_MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法...

    mysql utf8mb4 保存微信昵称特殊字符报错方法 公众号二次开发,在处理用户昵称的时候发现有的时候一些emoji是4字节的表情无法保存入库,经过查找资料发现是因为字段的编码问题造成的, utf ...

  5. 项目中对微信昵称特殊字符的处理

    xml的处理方式<!-- 对微信昵称特殊字符的处理 --><property name="connectionInitSqls" value="SET ...

  6. mysql存微信你曾_mysql保存微信昵称特殊字符的方法

    我在用mysql 保存微信昵称,当插入昵称数据的时候,报错.于是做了如下工作: 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼 ...

  7. mysql 过滤微信昵称表情_微信昵称emoji表情的过滤

    前言 微信昵称现在五花八门,可以加入各种表情符号.这些符号存储到mysql数据库时存在一些问题.这里记录下我的解决方法. 问题 第一种方案:修改数据库编码,支持存储emoji表情 mysql的utf8 ...

  8. mysql 过滤微信昵称表情_PHP正则过滤处理微信昵称中emoji字符的方法

    本文实例讲述了PHP正则过滤处理微信昵称中emoji字符的方法.分享给大家供大家参考,具体如下: 今天刚做了一个微信应用,在获取微信昵称的过程中报错了,经查原因是微信昵称中包含emoji字符,在写入数 ...

  9. 微信昵称特殊字符存储 PHP MYSQL

    php 解决微信昵称emoji表情插入MySQL报错 在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集, ...

  10. mysql保存微信昵称特殊字符

    我在用mysql 保存微信昵称,当插入昵称数据的时候,报错.于是做了如下工作: 一.简介    MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门 ...

最新文章

  1. 本机发邮件测试mail函数
  2. 【Linux病毒】阿里云+腾讯云服务器的 kdevtmpfsi(H2Miner挖矿蠕虫变种)病毒处理(5个详细步骤)
  3. 每日一题(22)——malloc与free(三)
  4. X-Pack Spark归档POLARDB数据做分析
  5. promise用法_图解 Promise 实现原理(四):Promise 静态方法实现
  6. Week08手写笔记
  7. 路由器下一跳地址怎么判断_路由器工作原理(一)
  8. 鲁百年创新设计思维学习总结
  9. linux根windows,linux系统刨根之路(二):实现windows和linux双系统-Go语言中文社区...
  10. web网页设计期末课程大作业——电影介绍5页HTML+CSS制作
  11. Gitlab修改文件上传10M大小限制
  12. 小红书小程序x-sign加密算法解析
  13. 计算机毕业设计ssm基于SSM的美妆分享网站vf952系统+程序+源码+lw+远程部署
  14. 企业青睐什么样的产品经理
  15. 我用ubuntu——linux路上搞qq,及,其他
  16. Java学习路线图,内附完整Java自学视频教程+工具经验
  17. python turtle库制作可爱的假向日葵
  18. OpenAI 重磅发布 ChatGPT iOS 客户端!
  19. 毕业设计 单片机太空游戏机设计与实现
  20. Windows域控管理—如何使用powershell远程连接服务器

热门文章

  1. 没拿到一毛钱股份的老公和CEO身份曝光,发文妻子的选妃照也被挖出来了……
  2. Tippy.js - 免费开源且高度可定制的气泡提示独立组件
  3. TI - MCU - MSP430使用指南31 - BSL
  4. 嵌入式开发自救指南(嵌入式怎么高薪基本思路)
  5. php代码实现微信代扣,PHP是如何实现微信H5支付的?
  6. FPGA下RAM的工作模式
  7. Blender学习入门(一)-Blender的下载和插件安装
  8. python求解一元二次方程
  9. w ndows 10关机快捷键,win10怎么关机 win10关机快捷键大全【图文演示】
  10. 腐蚀rust电脑分辨率调多少_腐蚀Rust帧数优化指南 游戏FPS提高方法说明