Java转义emoji等特殊符号
写在前面
网上找了很多转emoji等方法,大多有两种方法
- 更改数据库编码格式为utf8mb4
- 过滤字符串中的emoji
都不是很优雅
- 更改数据库编码,势必影响其他数据库
- 过滤emoj效率比较低
处理Emoji方式
这里推荐使用org.apache.commons.lang3.StringEscapeUtils工具类,简单等两行代码实现特殊符号和emoji表情的转义存储,和读取反转;
转义存储
- StringEscapeUtils.escapeXXX(content)
它有几种转码方式,可以根据个人格式进行选择:
- public static final String escapeCsv(final String input);
- public static final String escapeEcmaScript(final String input);
- public static final String escapeHtml3(final String input);
- public static final String escapeHtml4(final String input);
- public static final String escapeJava(final String input);
- public static final String escapeJson(final String input);
- public static final String escapeXml(final String input);
- public static String escapeXml10(final String input);
- public static String escapeXml11(final String input)
读取反转义
读取后,根据个人格式进行反转义,即可还原emoji值,供前端展示;
- public static final String unescapeCsv(final String input) ;
- public static final String unescapeEcmaScript(final String input);
- public static final String unescapeHtml3(final String input);
- public static final String unescapeHtml4(final String input);
- public static final String unescapeJava(final String input);
- public static final String unescapeJson(final String input);
- public static final String unescapeXml(final String input);
附加一段手打的复杂代码:
package utils; import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; public class EmojiUtils {
/**
* 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;
}
} /**
* @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)
* @param str
* 待转换字符串
* @return 转换后字符串
* @throws UnsupportedEncodingException
* exception
*/
public static String emojiConvert(String str) throws UnsupportedEncodingException {
String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])"; Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
try {
matcher.appendReplacement(sb, "[[" + URLEncoder.encode(matcher.group(1), "UTF-8") + "]]");
} catch (UnsupportedEncodingException e) {
throw e;
}
}
matcher.appendTail(sb);
return sb.toString();
} /**
* @Description 还原utf8数据库中保存的含转换后emoji表情的字符串
* @param str
* 转换后的字符串
* @return 转换前的字符串
* @throws UnsupportedEncodingException
* exception
*/
public static String emojiRecovery2(String str) throws UnsupportedEncodingException {
String patternString = "\\[\\[(.*?)\\]\\]"; Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(str); StringBuffer sb = new StringBuffer();
while (matcher.find()) {
try {
matcher.appendReplacement(sb, URLDecoder.decode(matcher.group(1), "UTF-8"));
} catch (UnsupportedEncodingException e) {
throw e;
}
}
matcher.appendTail(sb);
return sb.toString();
}
}
Java转义emoji等特殊符号的更多相关文章
- php + mysql 存入表情 【如何转义emoji表情,让它可以存入utf8的数据库】
方法1:base_encode64 这种方法是可以,但是旧数据没有经过encode操作,取数据的时候如果统一进行decode的话,旧数据会丢失的. 1 方法2:urlencode 这个似乎可以,对没有 ...
- Java转义符\\|
http://blog.csdn.net/stewen_001/article/details/22871737 看一段程序 String t = "a||b||c||d"; St ...
- 浅谈Java转义符\\|
看一段程序 String t = "a||b||c||d"; String[] temp = t.split("\\|\\|"); System.out.pri ...
- java 转义符
java 转义符 CreationTime--2018年7月12日15点33分 Author:Marydon 1.常见转义符 转义符在java中有特殊含义 转义字符 特殊含义 \b 退格( ...
- 【maven】【IDEA】idea中使用maven编译项目,报错java: 错误: 找不到符号 【2】
=================================================================================== idea中使用maven编译项目 ...
- Java处理emoji
1.问题产生情况 我遇到这个问题是做微信开发的时候有些有用的头像用了微信的emoji表情,然而我的mysql数据库用的编码是utf8_general_ci,就是utf-8编码,结果也就报错误了. 2. ...
- java转义xml中的多余尖括号
xml中的敏感字符是尖括号,如果xml的值中含有尖括号,那么在解析的时候就会报错,如: <?xml version="1.0" encoding="UTF-8&qu ...
- java过滤emoji表情(成功率高)
转载自:http://blog.csdn.net/huangchao064/article/details/53283738 基本能过滤大部分的ios,安卓,微信emoji表情 有很多别的帖子搜出来很 ...
- java转义符和正则表达式转义符
举例来说,连续相同的3位数字的正则表达式的标准语法是: ([\d])\1{2} 但是如果在java代码中这么写,就会出现语法错误,如下: String regEx = "([\d])\1{2 ...
随机推荐
- hdu 2227
和之前的hdu3030都快一样了 可以参考之前的题解 #include <iostream> #include <cstdio> #include <cstdlib> ...
- 第一天---关于环境和java基础
一.版本管理 git svn 二.Intellj idea快捷键 三.java基础知识
- Objective-C与Swift混编
1,创建项目(比如你先选择Objective-C) 2,项目创建成功后接着创建一个swift类 3,Xcode会弹出提示框问你需不需要创建桥接文件(桥接文件的名称默认为:项目名称-Bridging- ...
- SQL SERVER的锁机制(四)——概述(各种事务隔离级别发生的影响)
六.各种事务隔离级别发生的影响 修改数据的用户会影响同时读取或修改相同数据的其他用户.即这些用户可以并发访问数据.如果数据存储系统没有并发控制,则用户可能会看到以下负面影响: · 未提交的依赖关系(脏 ...
- [翻译]第三天- 在 Mac 上运行 .NET Core 应用程序
原文: http://michaelcrump.net/part3-aspnetcore/ *** 简介 该系列文章的完整列表如下: 第一天 - 在 Windows 下安装和运行 .NET Core ...
- .net项目的mvc简单发布
基于VS2015 1. 右键要发布的项目的启动项目 2. 弹窗选择自定义,随意输入配置文件名称 3. 下一页选择FileSystem文件系统发布,同时选择将文件系统发布到本地的路径 4. 下一页,选择 ...
- .NET MVC中如何使用手机验证码注册登陆
#region 手机验证码 /// <summary> /// /// </summary> /// <param name="Yonghushouji&quo ...
- Bootstrap框架下实现图片切换
准备图片,把相关记录添加至数据库表中: 创建一个存储过程,获取所有记录: 在ASP.NET MVC专案中,部署Bootstrap环境...... 然后创建一个model: using System; ...
- Swift5 语言参考(七) 属性
属性提供有关声明或类型的更多信息.Swift中有两种属性,即适用于声明的属性和适用于类型的属性. 您可以通过编写@符号后跟属性的名称以及属性接受的任何参数来指定属性: @attribute name ...
- spring IOC理解
用spring做了几个项目后发现,对spring的IOC理解还是不够清晰,今天就来总结下自己的理解(个人的一些见解) 以前用jsp+servlet做网站时,只是分了显示层(jsp),控制层(servl ...