/**

* @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)

* @param str

* 待转换字符串

* @return 转换后字符串

* @throws UnsupportedEncodingException

* exception

*/

public static String emojiConvert1(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) {

LOG.error("emojiConvert error", e);

throw e;

}

}

matcher.appendTail(sb);

LOG.debug("emojiConvert " + str + " to " + sb.toString()

+ ", len:" + sb.length());

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) {

LOG.error("emojiRecovery error", e);

throw e;

}

}

matcher.appendTail(sb);

LOG.debug("emojiRecovery " + str + " to " + sb.toString());

return sb.toString();

}

来源:https://www.cnblogs.com/shihaiming/p/5833244.html

java emoji编码转换_java转换emoji表情相关推荐

  1. java字符编码采用_JAVA字符编码三:Java应用中的编码问题

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  2. java字符编码问题_JAVA字符编码系列三:Java应用中的编码问题

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  3. 华为java安全编码规范_Java安全编码之SQL注入

    随着互联网的发展,Java语言在金融服务业.电子商务.大数据技术等方面的应用极其广泛.Java安全编码规范早已成为SDL中不可或缺的一部分.本文以Java项目广泛采用的两个框架Hibernate和My ...

  4. java多线程编码实现_Java多线程编码

    Java多线程编码 多线程一直是编写程序代码的一个核心,Java中实现方法有以下两种: 一.继承自Thread class Mythread extends Thread [ //方法 public ...

  5. java emoji显示乱码_Java 解决Emoji表情过滤问题

    Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错. 原因: UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去 ...

  6. java emoji显示乱码_Java处理emoji的方式

    Java处理emoji的方式 问题由来: java后端获取微信小程序用户昵称含emoji时,显示乱码. 处理思路过滤 是当接收到客户端传过来得数据-->正则判断传过来的字符串中是否包含emoji ...

  7. java版 pdf转换_Java 转换 PDF 版本

    在日常工作或生活中,我们使用的某些设备可能对PDF版本有严格要求,此时就需要更改PDF版本来适应设备.本文就将展示如何通过Free Spire.PDF for Java来转换PDF版本.(支持转换PD ...

  8. java file转输入流_Java转换流

    前面提到IO流可分为字节流和字符流,有时字节流和字符流之间也需要进行转换.在JDK中提供了两个类可以将字节流转换为字符流,它们分别是InputStreamReader和OutputStreamWrit ...

  9. java ascii 编码方式_JAVA 的ASCII字符编码一览表

    JAVA 的ASCII字符编码一览表 二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义 0000 0000 0 00 NUL ␀ 空字符(Null) 0000 0001 1 01 SOH ...

最新文章

  1. make menuconfig 错误
  2. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
  3. java学习(129):hashmap的方法
  4. All in Linux:一个算法工程师的IDE断奶之路
  5. 美团点评境外度假团队前端项目开发实践总结
  6. 60-150-046-使用-Sink-Flink落HDFS数据按事件时间分区解决方案
  7. python实现逆序输出一个数字
  8. (转)2012年度最佳Web前端开发工具和框架
  9. MATLAB学习笔记02-MATLAB的数据类型
  10. 索尼PS4破解之用户层代码执行(Part2)
  11. 找工作经历--生活的味道都在里面
  12. Elasticsearch(7.0.0) percolate termQuery 不好使 (type:text default analyzer)
  13. qcqa是什么职位_QA,QE是什么职位
  14. 用Python实现斗地主游戏(终端版)
  15. 【正则】1302- 快速上手常用正则表达式
  16. Python学习——异常
  17. guice的使用例子
  18. 2022新版云进销存系统ERP销售库存仓库员工管理系统源码
  19. Unable to install “xxxx”
  20. 期货开户办理银期转账签约的时间

热门文章

  1. ASP.NET Core 2.0 全局配置项
  2. DotNetCore跨平台~Dockerfile的解释
  3. 了解 C# foreach 内部语句和使用 yield 实现的自定义迭代器
  4. SuperSocket源码解析之开篇
  5. Spring Boot 解决跨域Cors问题
  6. ArcGIS实验教程——实验三十九:ArcGIS多元分类(ISO聚类分析、最大似然分类、主成分分析)案例教程
  7. Android Studio之查找当前类的位置图标没了
  8. Android之事件总线EventBus详解
  9. es mysql 同步插件_[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)...
  10. php支持cs吗,关于composer、phpmd和phpcs于windows中的安装与使用方法