/**
* unicode 中文(或者其它语言)互转,
*/
public class UnicodeUtils {
/**
* 将byte数组转化为string
*
* @param bytes length 必须为偶数,两个byte可以转化为一个char
* @return
*/
public static String bytesToString(byte[] bytes) {
StringBuilder builder = new StringBuilder();
//两个byte转化为一个char
for (int i = 0; i < bytes.length / 2; i++) {
builder.append(byteToChar(bytes[i * 2], bytes[i * 2 + 1]));
}
return builder.toString();
}
/**
* string转化为Unicode 在转化为bytes
*
* @param str
* @return
*/
public static byte[] stringToBytes(String str) {
//先将String转化为char数组
char[] charArr = str.toCharArray();
//定义一个长度为charArr长度两倍的数组,一个char需要两个byte表示
byte[] bytes = new byte[charArr.length * 2];
for (int i = 0; i < charArr.length; i++) {
//将一个char拆分为两个byte
byte[] charToByte = charToByte(charArr[i]);
bytes[i * 2] = charToByte[0];
bytes[i * 2 + 1] = charToByte[1];
}
return bytes;
}
/**
* 字符串转unicode
*
* @param str
* @return
*/
public static String stringToUnicode(String str) {
StringBuffer sb = new StringBuffer();
char[] c = str.toCharArray();
for (int i = 0; i < c.length; i++) {
sb.append("\\u" + Integer.toHexString(c[i]));
}
return sb.toString();
}
/**
* unicode转字符串
*
* @param unicode
* @return
*/
public static String unicodeToString(String unicode) {
StringBuffer sb = new StringBuffer();
String[] hex = unicode.split("\\\\u");
for (int i = 1; i < hex.length; i++) {
int index = Integer.parseInt(hex[i], 16);
sb.append((char) index);
}
return sb.toString();
}
/**
* char 转化为 byte数组
* 一个char转化为两个字节的byte
*
* @param c
* @return
*/
public static byte[] charToByte(char c) {
byte[] b = new byte[2];
b[0] = (byte) ((c & 0xFF00) >> 8);
b[1] = (byte) (c & 0xFF);
return b;
}
/**
* 两个byte可以转化为一个char
*
* @param b
* @return
*/
public static char byteToChar(byte... b) {
char c = (char) (((b[0] & 0xFF) << 8) | (b[1] & 0xFF));
return c;
}
/**
* Unicode字符串 转化为 byte字符串
*
* @param unicode
* @return
*/
public static String unicodeToByte(String unicode) {
StringBuffer sb = new StringBuffer();
String[] hex = unicode.split("\\\\u");
for (int i = 1; i < hex.length; i++) {
// Log.e("unicodeToByte", hex[i]);
int index = Integer.parseInt(hex[i], 16);
byte[] bytes = charToByte((char) index);
sb.append(DataUtil.bytesToHexString(bytes));
}
return sb.toString();
}
/**
* unicode 转字符数组
*/
public static char[] unicode2Chars(String unicode) {
StringBuffer string = new StringBuffer();
String[] hex = unicode.split("\\\\u");
char[] cs = new char[hex.length];
for (int i = 1; i < hex.length; i++) {
// 转换出每一个代码点
int data = Integer.parseInt(hex[i], 16);
cs[i] = (char) data;
}
return cs;
}
}