1. 程式人生 > >mysql解決emoji表情

mysql解決emoji表情

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”))));