写在前面

网上找了很多转emoji等方法,大多有两种方法

  1. 更改数据库编码格式为utf8mb4
  2. 过滤字符串中的emoji

都不是很优雅

  1. 更改数据库编码,势必影响其他数据库
  2. 过滤emoj效率比较低

处理Emoji方式

这里推荐使用org.apache.commons.lang3.StringEscapeUtils工具类,简单等两行代码实现特殊符号和emoji表情的转义存储,和读取反转;

转义存储

  1. StringEscapeUtils.escapeXXX(content)

它有几种转码方式,可以根据个人格式进行选择:

  1. public static final String escapeCsv(final String input);
  2. public static final String escapeEcmaScript(final String input);
  3. public static final String escapeHtml3(final String input);
  4. public static final String escapeHtml4(final String input);
  5. public static final String escapeJava(final String input);
  6. public static final String escapeJson(final String input);
  7. public static final String escapeXml(final String input);
  8. public static String escapeXml10(final String input);
  9. public static String escapeXml11(final String input)

读取反转义

读取后,根据个人格式进行反转义,即可还原emoji值,供前端展示;

  1. public static final String unescapeCsv(final String input) ;
  2. public static final String unescapeEcmaScript(final String input);
  3. public static final String unescapeHtml3(final String input);
  4. public static final String unescapeHtml4(final String input);
  5. public static final String unescapeJava(final String input);
  6. public static final String unescapeJson(final String input);
  7. 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();
}
}

最新文章

  1. ★Kali信息收集~2.Whois :域名信息
  2. [MongoDB]Mongo基本使用:
  3. FastJson转换自定义枚举类
  4. maven之respository(仓库)本地路径修改
  5. CM: 如何自己build一个官方版本出来,使用官方release中的manifests.xml
  6. Runtime -----那些被忽略的技能
  7. C#之父 Anders Hejlsberg
  8. 分享:在微信公众平台做HTML5游戏经验谈(转载与http://software.intel.com/zh-cn/blogs/2013/04/03/html5)
  9. (转)C# DateTime格式化大全
  10. Spinner 实现key value 效果
  11. file_get_contents 获取不了网页内容
  12. 浅谈长尾理论--《Makers》读后感
  13. cocos2d-html5游戏图片资源选择
  14. List之Distinct()
  15. Linux权限相关操作命令
  16. Node.js TTY
  17. PyCharm无法激活
  18. 2017-12-19python全栈9期第四天第二节之列表的增删查改之正向排序和倒向排序和反转
  19. nodeJs和JavaScript的异同(转)
  20. 什么是数据库ACID?

热门文章

  1. Git 安装 windows && linux
  2. ThreadLocal实现线程级上下文
  3. ASP.NET Core 2.1 源码学习之 Options[3]:IOptionsMonitor
  4. Python进程池举例
  5. Microsoft.Office.Interop.Excel.ApplicationClass can not embedded 的问题
  6. 使用xftp连接到ftp服务器即常见问题的解决
  7. c# MVC Action 如何知道 发送方给你的 Json 数据的格式内容是什么
  8. 在Asp.Net MVC中利用快递100接口实现订阅物流轨迹功能
  9. 【UOJ244】 【UER #7】短路(贪心)
  10. UPX源码分析——加壳篇