在應用開發和數據傳輸、持久化過程中,中文與 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;
}
}