在应用开发和数据传输、持久化过程中,中文与 unicode 互转是相当有用的,比如说社交应用中经常用到的传输存储 emoji 表情。整理为工具类后更是方便统一调用,话不多说上源码:
/**
* <p>unicode 编码解码工具类<p>
*
*/
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;
}
}
[原文链接](https://blog.csdn.net/u011704894/article/details/51706519)
网友评论