From b1fb83530b7105e4aa73e4101727dea945eb01c2 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 29 八月 2025 21:48:15 +0800
Subject: [PATCH] bug修改
---
cloud-server-management/src/main/java/com/dsh/course/util/EmojiUtil.java | 95 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 95 insertions(+), 0 deletions(-)
diff --git a/cloud-server-management/src/main/java/com/dsh/course/util/EmojiUtil.java b/cloud-server-management/src/main/java/com/dsh/course/util/EmojiUtil.java
new file mode 100644
index 0000000..8e551fd
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/util/EmojiUtil.java
@@ -0,0 +1,95 @@
+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();
+ }
+
+}
--
Gitblit v1.7.1