zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    如何快速实现一个command
    引用mvvmlight dll ,操作command
    ANSI X9.8标准 PIN xor PAN获取PIN BlOCK
    关于Application.DoEvents()==转
    进程间通信方式【转】
    30岁后程序员的出路[转]
    git实用操作21条
    where T:new() 是什么意思
    使用Chrome console提取页面数据
    Maven入门2-pom.xml文件与settings.xml文件
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/13254435.html
Copyright © 2011-2022 走看看