EmojiConverterUtil.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.futu.course.common.utils;
  2. import java.io.UnsupportedEncodingException;
  3. import java.net.URLDecoder;
  4. import java.net.URLEncoder;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7. /**
  8. * @author 杨杨吖
  9. * @QQ 823208782
  10. * @WX yjqi12345678
  11. * @create 2022-03-24 10:38
  12. */
  13. public class EmojiConverterUtil {
  14. /**
  15. * 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)
  16. * @param str
  17. * @return
  18. */
  19. public static String emojiConvert(String str)
  20. {
  21. String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
  22. Pattern pattern = Pattern.compile(patternString);
  23. Matcher matcher = pattern.matcher(str);
  24. StringBuffer sb = new StringBuffer();
  25. while(matcher.find()) {
  26. try {
  27. matcher.appendReplacement(
  28. sb,
  29. "[["
  30. + URLEncoder.encode(matcher.group(1),
  31. "UTF-8") + "]]");
  32. } catch(UnsupportedEncodingException e) {
  33. }
  34. }
  35. matcher.appendTail(sb);
  36. return sb.toString();
  37. }
  38. /**
  39. * 还原utf8数据库中保存的含转换后emoji表情的字符串
  40. * @param str
  41. * @return
  42. */
  43. public static String emojiRecovery(String str){
  44. String patternString = "\\[\\[(.*?)\\]\\]";
  45. Pattern pattern = Pattern.compile(patternString);
  46. Matcher matcher = pattern.matcher(str);
  47. StringBuffer sb = new StringBuffer();
  48. while(matcher.find()) {
  49. try {
  50. matcher.appendReplacement(sb,
  51. URLDecoder.decode(matcher.group(1), "UTF-8"));
  52. } catch(UnsupportedEncodingException e) {
  53. }
  54. }
  55. matcher.appendTail(sb);
  56. return sb.toString();
  57. }
  58. }