mysql解決emoji表情
阿新 • • 發佈:2018-12-13
package com.di3fang.kpi.utils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; /** 對 emoji 表情編碼轉換的工具類 */ public class EmojiUtils { /** 編碼格式 */ private static final String ENCODING = "UTF-8"; private EmojiUtils() { throw new UnsupportedOperationException("u can't instantiate me..."); } /** 將字串中的emoji表情轉換成可以在utf-8字符集資料庫中儲存的格式(表情佔4個位元組,需要utf8mb4字符集) * * @param str * str待轉換字串 * @return 轉換後字串 */ public static String emojiConvert(String str) { if (str == null) return ""; 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), ENCODING) + "]]"); } catch (UnsupportedEncodingException e) { return str; } } matcher.appendTail(sb); return sb.toString(); } /** 還原utf8資料庫中儲存的含轉換後emoji表情的字串 * * @param str * str轉換後的字串 * @return 轉換前的字串 */ public static String emojiRecovery(String str) { 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), ENCODING)); } catch (UnsupportedEncodingException e) { return str; } } matcher.appendTail(sb); return sb.toString(); } public static String filter(String str) { if (str.trim().isEmpty()) { return str; } String pattern = "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]"; String reStr = ""; Pattern emoji = Pattern.compile(pattern); Matcher emojiMatcher = emoji.matcher(str); str = emojiMatcher.replaceAll(reStr); return str; } public static String getLocalIp(HttpServletRequest request) { String remoteAddr = request.getRemoteAddr(); String forwarded = request.getHeader("X-Forwarded-For"); String realIp = request.getHeader("X-Real-IP"); System.out.println(request.getHeaderNames().toString()); String ip = remoteAddr; if(realIp!=null){ ip=realIp; } if(forwarded!=null){ ip=forwarded; } return ip; } }
//例項: //微信授權後獲取暱稱,轉換格式存入資料庫 EmojiUtils.emojiConvert(wechatSnsUserInfo.getNickname()); //將轉化好存放資料庫的暱稱轉換格式 staff.put(“nickname”, EmojiUtils.emojiRecovery(String.valueOf(staff.get(“nickname”))));