开发者社区> 问答> 正文

MySQL数据库插入emoj表情包报错? MySQL报错

MySQL数据库插入emoj表情包的时候报错,错误内容如下,怎么解决? 网上说把数据库编码方式替换utf8mb4,我试了一下还是不行 由:java.sql.SQLException:不正确的字符串值:'xF0x9Fx98x8F“,...'列为'

展开
收起
海边一只船 2020-05-25 20:37:43 879 0
1 条回答
写回答
取消 提交回答
  • 如果数据库编码方式替换utf8mb4还是不可以,你可一尝试下以下工具类 需要注意的是,插入数据库之前调用emojiConvert1(),把需要保存的文本格式化一下, 删除数据返回给前端的时候调用emojiConvert2()解码

        private final static Logger logger = LoggerFactory.getLogger(DateUtils.class);
    
        /**
         * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)
         * @param str
         * 待转换字符串
         * @return 转换后字符串
         * @throws UnsupportedEncodingException
         * exception
         */
        public static String emojiConvert1(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) {
                    logger.debug("emojiConvert " + str + " to " + sb.toString()
                            + ", len:" + sb.length());
                    throw e;
                }
            }
            matcher.appendTail(sb);
            return sb.toString();
        }
    
        /**
         * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串
         * @param str
         * 转换后的字符串
         * @return 转换前的字符串
         * @throws UnsupportedEncodingException
         * exception
         */
        public static String emojiRecovery2(String str)
                throws UnsupportedEncodingException {
            String patternString = "\\[\\[(.*?)\\]\\]";
    
            Pattern pattern = Pattern.compile(patternString);
            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) {
                    logger.error("emojiRecovery error", e);
                    throw e;
                }
            }
            matcher.appendTail(sb);
            logger.debug("emojiRecovery " + str + " to " + sb.toString());
            return sb.toString();
        }
    }
    
    
    2020-05-25 20:56:06
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于云原生数据仓库AnalyticDB PG的最佳实践 立即下载
新氧云原生全栈数仓最佳实践 立即下载
离线实时一体化数仓与湖仓一体—云原生大数据平台的持续演进 立即下载

相关镜像