源码如下:
import java.io.UnsupportedEncodingException;
public class CharsetConvertor {
public static void main(String[] args){
// test a method getHexString(byte b)
// System.out.println(getHexString((byte)256));
//test a method getBinaryString(int i)
// System.out.println(getBinaryString(8));
try {
System.out.println(gbToUtf8("经"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String gbToUtf8(String source) throws UnsupportedEncodingException{
StringBuffer sb = new StringBuffer();
for(int i=0; i<source.length(); i++){
String s = source.substring(i, i+1);
if(s.charAt(0)>0x80){
byte[] bytes = s.getBytes("Unicode");
String binaryStr = "";
for(int j=2;j<bytes.length;j+=2){
//the first byte
String hexStr = getHexString(bytes[j+1]);
String binStr = getBinaryString(Integer.valueOf(hexStr, 16));
binaryStr += binStr;
//the second byte
hexStr = getHexString(bytes[j]);
binStr = getBinaryString(Integer.valueOf(hexStr, 16));
binaryStr += binStr;
}
String s1 = "1110"+binaryStr.substring(0, 4);
String s2 = "10"+binaryStr.substring(4, 10);
String s3 = "10"+binaryStr.substring(10, 16);
byte[] bs = new byte[3];
bs[0] = Integer.valueOf(s1,2).byteValue();
bs[1] = Integer.valueOf(s2,2).byteValue();
bs[2] = Integer.valueOf(s3,2).byteValue();
String ss = new String(bs,"UTF-8");
sb.append(ss);
}
}
return sb.toString();
}
public static String getHexString(byte b){
String hexStr = Integer.toHexString(b);
int m = hexStr.length();
if(m<2){
hexStr = "0"+hexStr;
}else{
hexStr = hexStr.substring(m-2);
}
return hexStr;
}
private static String getBinaryString(int i){
String binaryStr = Integer.toBinaryString(i);
int length = binaryStr.length();
for(int k=0; k < 8-length;k++){
binaryStr = "0"+binaryStr;
}
return binaryStr;
}
}