1. 程式人生 > >【工具類】Unicode與中文互轉

【工具類】Unicode與中文互轉

在應用開發和資料傳輸、持久化過程中,中文與 unicode 互轉是相當有用的,比如說社交應用中經常用到的傳輸儲存 emoji 表情。整理為工具類後更是方便統一呼叫,話不多說上原始碼:

/**
 * <p>unicode 編碼解碼工具類<p>
 * @author qsmx
 *
 */
public class UnicodeUtil {

	/**
	 * <p>轉為unicode 編碼<p>
	 * @param string
	 * @return unicodeString
	 */
	public static String encode(String str) {
		String prifix = "\\u";
		StringBuffer unicode = new StringBuffer();
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			String code = prifix + format(Integer.toHexString(c));
			unicode.append(code);
		}
		return unicode.toString();
	}

	/**
	 * <p>unicode 解碼<p>
	 * @param unicode
	 * @return originalString
	 */
	public static String decode(String unicode) {
		StringBuffer str = new StringBuffer();
		String[] hex = unicode.split("\\\\u");
		for (int i = 1; i < hex.length; i++) {
			int data = Integer.parseInt(hex[i], 16);
			str.append((char) data);
		}
		return str.length() > 0 ? str.toString() : unicode;
	}
	
	/**
	 * <p>轉為資料庫查詢編碼<p>
	 * 向資料庫查詢時,\\u需要轉為%
	 * @param str
	 * @return
	 */
	public static String encodeDBSearchParam(String str) {
		str = encode(str);
		str = str.replace("\\", "%");
		return str;
	}
	
	/**
	 * <p>解碼資料庫查詢引數<p>
	 * 資料庫查詢後,回傳引數% 轉回\\u
	 * @param str
	 * @return
	 */
	public static String decodeDBSearchParam(String str) {
		str = str.replace("%", "\\");
		str = decode(str);
		return str;
	}
	
	/**
	 * 為長度不足4位的unicode 值補零
	 * @param str
	 * @return
	 */
	private static String format(String str) {
		for ( int i=0, l=4-str.length(); i<l; i++ ) 
			str = "0" + str;
		return str;
	}

}
End .