private static final int MASKBITS = 0x3F;
private static final int MASKBYTE = 0x80;
private static final int MASK2BYTES = 0xC0;
private static final int MASK3BYTES = 0xE0;
//private static final int MASK4BYTES = 0xF0;
//private static final int MASK5BYTES = 0xF8;
//private static final int MASK6BYTES = 0xFC;
private static final int MASKBYTE = 0x80;
private static final int MASK2BYTES = 0xC0;
private static final int MASK3BYTES = 0xE0;
//private static final int MASK4BYTES = 0xF0;
//private static final int MASK5BYTES = 0xF8;
//private static final int MASK6BYTES = 0xFC;
/** */
/**
* @功能: 将UTF-8编码转成UNICODE(UTF-16LE)编码
* @参数: byte[] b 源字节数组
* @返回值: byte[] b 转为UNICODE编码后的数组
* @作者: imuse
* @MAIL: postzhu@hotmail.com
*/
public static byte [] UTF8_TO_UNICODE( byte [] b) ... {
int i = 0;
int j = 0;
byte[] unicodeByte = new byte[b.length * 2];
while (i < b.length) ...{
byte[] bUnicode = new byte[2];
bUnicode[0] = bUnicode[1] = 0;
int nUnicode = 0;
if ((b[i] & MASK3BYTES) == MASK3BYTES) ...{
nUnicode = ((b[i] & 0x0F) << 12) | ((b[i + 1] & MASKBITS) << 6)
| (b[i + 2] & MASKBITS);
i += 3;
}
// 110xxxxx 10xxxxxx
else if ((b[i] & MASK2BYTES) == MASK2BYTES) ...{
nUnicode = ((b[i] & 0x1F) << 6) | (b[i + 1] & MASKBITS);
i += 2;
}
// 0xxxxxxx
else if (b[i] < MASKBYTE) ...{
nUnicode = b[i];
i += 1;
}
unicodeByte[j++] = (byte) (nUnicode & 0xFF);
unicodeByte[j++] = (byte) ((nUnicode >> 8) & 0xFF);
}
b = new byte[j];
System.arraycopy(unicodeByte, 0, b, 0, j);
return b;
}
* @功能: 将UTF-8编码转成UNICODE(UTF-16LE)编码
* @参数: byte[] b 源字节数组
* @返回值: byte[] b 转为UNICODE编码后的数组
* @作者: imuse
* @MAIL: postzhu@hotmail.com
*/
public static byte [] UTF8_TO_UNICODE( byte [] b) ... {
int i = 0;
int j = 0;
byte[] unicodeByte = new byte[b.length * 2];
while (i < b.length) ...{
byte[] bUnicode = new byte[2];
bUnicode[0] = bUnicode[1] = 0;
int nUnicode = 0;
if ((b[i] & MASK3BYTES) == MASK3BYTES) ...{
nUnicode = ((b[i] & 0x0F) << 12) | ((b[i + 1] & MASKBITS) << 6)
| (b[i + 2] & MASKBITS);
i += 3;
}
// 110xxxxx 10xxxxxx
else if ((b[i] & MASK2BYTES) == MASK2BYTES) ...{
nUnicode = ((b[i] & 0x1F) << 6) | (b[i + 1] & MASKBITS);
i += 2;
}
// 0xxxxxxx
else if (b[i] < MASKBYTE) ...{
nUnicode = b[i];
i += 1;
}
unicodeByte[j++] = (byte) (nUnicode & 0xFF);
unicodeByte[j++] = (byte) ((nUnicode >> 8) & 0xFF);
}
b = new byte[j];
System.arraycopy(unicodeByte, 0, b, 0, j);
return b;
}