New file |
| | |
| | | package com.dsh.course.util; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLDecoder; |
| | | import java.net.URLEncoder; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | public class EmojiUtil { |
| | | /** |
| | | * 编码 |
| | | * |
| | | * @param str 待转换字符串 |
| | | * @return 转换后字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集) |
| | | */ |
| | | public static String emojiEncode(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(); |
| | | } |
| | | |
| | | /** |
| | | * 解码 |
| | | * |
| | | * @param str 转换后的字符串 |
| | | * @return 转换前的字符串 |
| | | * @throws UnsupportedEncodingException exception |
| | | * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串 |
| | | */ |
| | | public static String emojiDecode(String str) |
| | | throws UnsupportedEncodingException { |
| | | String patternString = "\\[\\[(.*?)\\]\\]"; |
| | | |
| | | Pattern pattern = Pattern.compile(patternString); |
| | | if (str == null) { |
| | | return str; |
| | | } |
| | | 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()); |
| | | // System.out.println("emojiRecovery " + str + " to " + sb.toString()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * @param str 待过滤字符串 |
| | | * @return 过滤后字符串 |
| | | * exception |
| | | * @Description 将字符串中的emoji表情过滤掉 |
| | | */ |
| | | public static String emojiSub(String str) { |
| | | 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()) { |
| | | matcher.appendReplacement(sb, ""); |
| | | } |
| | | matcher.appendTail(sb); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | } |