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 < b.length; i++) {
41             if (i < b.length - 1) {
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 < s.length; 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM