關於java中String字元轉碼的幾個小測試

itscrambler發表於2012-11-24

// 注 北字的UTF-8編碼是E5 8C 97 GBK編碼B1 B1

byte[] b = new byte[]{(byte)0xe5, (byte)0x8c, (byte)0x97};
String s2 = new String(b, "UTF-8");
System.out.println(s2);
System.out.println(ToStringUtil.byteArrayToHexString(s2
.getBytes()));
System.out.println("-----");
System.out.println(ToStringUtil.byteArrayToHexString(s2
.getBytes("UTF-8")));

輸出為:


In Hex:
0xb1 0xb1
-----
In Hex:
0xe5 0x8c 0x97

[@more@]String s2 = new String("北".getBytes("UTF-8"), "UTF-8");
System.out.println(s2);
System.out.println(ToStringUtil.byteArrayToHexString(s2
.getBytes()));
System.out.println("-----");
System.out.println(ToStringUtil.byteArrayToHexString(s2
.getBytes("UTF-8")));

輸出為:


In Hex:
0xb1 0xb1
-----
In Hex:
0xe5 0x8c 0x97

String s2 = new String("北".getBytes(), "UTF-8");
System.out.println(s2);
System.out.println(ToStringUtil.byteArrayToHexString(s2
.getBytes()));
System.out.println("-----");
System.out.println(ToStringUtil.byteArrayToHexString(s2
.getBytes("UTF-8")));

輸出為:

??
In Hex:
0x3f 0x3f
-----
In Hex:
0xef 0xbf 0xbd 0xef 0xbf 0xbd

也就是說:

採用public String(byte bytes[], String charsetName)方式建立String時 byte[]的編碼 和charsetName 應該是一致的

String在VM儲存的字符集應該是unicode,getBytes 按指定字符集或者預設字符集進行轉換輸出。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26273052/viewspace-1059814/,如需轉載,請註明出處,否則將追究法律責任。

相關文章