Java过滤微信昵称特殊字符
使用:
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过滤微信昵称特殊字符相关推荐
- java 过滤微信昵称_JAVA微信开发-如何保存包含特殊字符的微信昵称
我们在做微信开发的时候,有一个很重要的就是通过openid获取用户的详细信息,包含昵称,头像,省,市,区的信息,但是现在移动时代,很多人追求个性,在名字当中大量使用火星文或者表情符.(本人实际测试过一 ...
- java过滤微信昵称emoji表情
注:核心代码为转载 最近在开发中遇到要过滤掉微信名称中的表情,再入库的功能:在找了多篇实现验证后,发现排名在前的文章们竟然有bug,最终找到以下实现,验证后符合要求,特此记录一下. import ja ...
- java 过滤微信昵称_java过滤微信昵称emoji表情与非emoji的问题解决方法
import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 过滤emoji表情与非emoji表情 * @author h ...
- mysql 存储微信昵称乱码_MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法...
mysql utf8mb4 保存微信昵称特殊字符报错方法 公众号二次开发,在处理用户昵称的时候发现有的时候一些emoji是4字节的表情无法保存入库,经过查找资料发现是因为字段的编码问题造成的, utf ...
- 项目中对微信昵称特殊字符的处理
xml的处理方式<!-- 对微信昵称特殊字符的处理 --><property name="connectionInitSqls" value="SET ...
- mysql存微信你曾_mysql保存微信昵称特殊字符的方法
我在用mysql 保存微信昵称,当插入昵称数据的时候,报错.于是做了如下工作: 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼 ...
- mysql 过滤微信昵称表情_微信昵称emoji表情的过滤
前言 微信昵称现在五花八门,可以加入各种表情符号.这些符号存储到mysql数据库时存在一些问题.这里记录下我的解决方法. 问题 第一种方案:修改数据库编码,支持存储emoji表情 mysql的utf8 ...
- mysql 过滤微信昵称表情_PHP正则过滤处理微信昵称中emoji字符的方法
本文实例讲述了PHP正则过滤处理微信昵称中emoji字符的方法.分享给大家供大家参考,具体如下: 今天刚做了一个微信应用,在获取微信昵称的过程中报错了,经查原因是微信昵称中包含emoji字符,在写入数 ...
- 微信昵称特殊字符存储 PHP MYSQL
php 解决微信昵称emoji表情插入MySQL报错 在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集, ...
- mysql保存微信昵称特殊字符
我在用mysql 保存微信昵称,当插入昵称数据的时候,报错.于是做了如下工作: 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门 ...
最新文章
- 本机发邮件测试mail函数
- 【Linux病毒】阿里云+腾讯云服务器的 kdevtmpfsi(H2Miner挖矿蠕虫变种)病毒处理(5个详细步骤)
- 每日一题(22)——malloc与free(三)
- X-Pack Spark归档POLARDB数据做分析
- promise用法_图解 Promise 实现原理(四):Promise 静态方法实现
- Week08手写笔记
- 路由器下一跳地址怎么判断_路由器工作原理(一)
- 鲁百年创新设计思维学习总结
- linux根windows,linux系统刨根之路(二):实现windows和linux双系统-Go语言中文社区...
- web网页设计期末课程大作业——电影介绍5页HTML+CSS制作
- Gitlab修改文件上传10M大小限制
- 小红书小程序x-sign加密算法解析
- 计算机毕业设计ssm基于SSM的美妆分享网站vf952系统+程序+源码+lw+远程部署
- 企业青睐什么样的产品经理
- 我用ubuntu——linux路上搞qq,及,其他
- Java学习路线图,内附完整Java自学视频教程+工具经验
- python turtle库制作可爱的假向日葵
- OpenAI 重磅发布 ChatGPT iOS 客户端!
- 毕业设计 单片机太空游戏机设计与实现
- Windows域控管理—如何使用powershell远程连接服务器
热门文章
- 没拿到一毛钱股份的老公和CEO身份曝光,发文妻子的选妃照也被挖出来了……
- Tippy.js - 免费开源且高度可定制的气泡提示独立组件
- TI - MCU - MSP430使用指南31 - BSL
- 嵌入式开发自救指南(嵌入式怎么高薪基本思路)
- php代码实现微信代扣,PHP是如何实现微信H5支付的?
- FPGA下RAM的工作模式
- Blender学习入门(一)-Blender的下载和插件安装
- python求解一元二次方程
- w ndows 10关机快捷键,win10怎么关机 win10关机快捷键大全【图文演示】
- 腐蚀rust电脑分辨率调多少_腐蚀Rust帧数优化指南 游戏FPS提高方法说明