特殊表情存数据库处理
生活随笔
收集整理的這篇文章主要介紹了
特殊表情存数据库处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
開發途中遇到評價的功能,需要存入表情符號比如:
以及這種
存入數據庫的時候會拋出異常,\x86\啥的
百度解決辦法是 數據庫改utf8mb4? 但是測試改表的字符集并沒有用,
然后我也沒敢改庫的字符集仍然使用utf8
我的解決辦法是代碼層面的處理,進行URLEncoder轉碼 和URLEncoder 解碼:
/*** @Description emoji表情轉換* @param str 待轉換字符串* @return 轉換后字符串* @throws UnsupportedEncodingException*/public static String emojiConvertToUtf(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) {throw e;}}matcher.appendTail(sb);log.info("emoji表情轉字符串:"+sb.toString());return sb.toString();}/*** @Description 還原emoji表情的字符串** @param str 轉換后的字符串* @return 轉換前的字符串* @throws UnsupportedEncodingException*/public static String utfemojiRecovery(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) {throw e;}}matcher.appendTail(sb);log.info("字符串轉emoji表情:"+sb.toString());return sb.toString();}注意:
測試時在對象get set方法上轉碼 解碼,存入數據庫仍然是失敗的
大概是因為mybatis的insert 和 update方法 mapper快捷方法實際處理時仍存入的未轉碼的
所以在業務代碼上進行轉碼解碼的:
/*** 轉碼 解決表情問題*/try {evaluateContent = StringUtil.emojiConvertToUtf(evaluateContent);} catch (UnsupportedEncodingException e) {throw new BusinessException(CommonErrorCode.E_102906);}?
/*** 解碼*/try {evaluateContent = StringUtil.utfemojiRecovery(evaluateContent);} catch (UnsupportedEncodingException e) {throw new BusinessException(CommonErrorCode.E_102906);}?
總結
以上是生活随笔為你收集整理的特殊表情存数据库处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python数据显示为什么只能显示最后一
- 下一篇: linux cmake编译源码,linu