作者:小就小-1980 | 来源:互联网 | 2023-01-26 21:12
遇到这个问题是在测试时发现用的是mysql,字符集为utf8,查到各路大神的办法,需要修改表的字符集为utf8mb4,但是试了很多次,无果~于是尝试用java来实现,其实主要就是入
遇到这个问题是在测试时发现用的是mysql,字符集为utf8,查到各路大神的办法,需要修改表的字符集为utf8mb4,但是试了很多次,无果~
于是尝试用java来实现,其实主要就是入库时用正则将表情转为字符,然后从库中取出时为string:
1 /**
2 * 将str中的emoji表情转为byte数组
3 *
4 * @param str
5 * @return
6 */
7 public static String resolveToByteFromEmoji(String str) {
8 Pattern pattern = Pattern
9 .compile("[^(\u2E80-\u9FFF\\w\\s`~!@#\\$%\\^&\\*\\(\\)_+-?()——=\\[\\]{}\\|;。,、《》”:;“!……’:'\"<,>\\.?/\\\\*)]");
10 Matcher matcher = pattern.matcher(str);
11 StringBuffer sb2 = new StringBuffer();
12 while (matcher.find()) {
13 matcher.appendReplacement(sb2, resolveToByte(matcher.group(0)));
14 }
15 matcher.appendTail(sb2);
16 return sb2.toString();
17 }
18
19 /**
20 * 将str中的byte数组类型的emoji表情转为正常显示的emoji表情
21 *
22 * @param str
23 * @return
24 */
25 public static String resolveToEmojiFromByte(String str) {
26 Pattern pattern2 = Pattern.compile("<:([[-]\\d*[,]]+):>");
27 Matcher matcher2 = pattern2.matcher(str);
28 StringBuffer sb3 = new StringBuffer();
29 while (matcher2.find()) {
30 matcher2.appendReplacement(sb3, resolveToEmoji(matcher2.group(0)));
31 }
32 matcher2.appendTail(sb3);
33 return sb3.toString();
34 }
35
36 private static String resolveToByte(String str) {
37 byte[] b = str.getBytes();
38 StringBuffer sb = new StringBuffer();
39 sb.append("<:");
40 for (int i = 0; i 41 if (i 42 sb.append(Byte.valueOf(b[i]).toString() + ",");
43 } else {
44 sb.append(Byte.valueOf(b[i]).toString());
45 }
46 }
47 sb.append(":>");
48 return sb.toString();
49 }
50
51 private static String resolveToEmoji(String str) {
52 str = str.replaceAll("<:", "").replaceAll(":>", "");
53 String[] s = str.split(",");
54 byte[] b = new byte[s.length];
55 for (int i = 0; i 56 b[i] = Byte.valueOf(s[i]);
57 }
58 return new String(b);
59 }因为表情都是有规律的,都是以<:开始:>结束~所以自然就有办法解决啦~~
————————————————
版权声明:本文为CSDN博主「wangdan199112」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangdan199112/java/article/details/53290154