大家都知道java的char是双字节字符,而String提供了getBytes的函数,这个函数得到的bytes数组是什么样的形式存在呢?是双字节的字符顺序存在数组中吗?
做个试验
String ts1 = "112";
byte[] ts2 = null;
ts2 = ts1.getBytes();
这个输出的是112的ascii 49 49 50
注意到这个有个重载的方法加了个参数encoding,换个试试
String tests1 = "112";
byte[] tests2 = null;
try {
ts2 = ts1.getBytes("UTF-8”);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
输出还是 494950
String tests1 = "112";
byte[] tests2 = null;
try {
ts2 = ts1.getBytes("UTF-16LE”);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
输出变为了 490 490 500
在看一下sdk,--!写的太清楚了。。
byte[] | getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
byte[] | getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。 |
系统的默认的charset是GBK,而Utf-8使用的是变字节编码,Utf-16用的二字节定长编码。