1、getBytes()方法
String的getBytes() 方法:得到一个操作系统默认编码的字节数组。所以在不同的操作系统下,返回的东西可能是不一样的!
(String decode) 方法:根据指定的decode编码,返回该字符串在指定编码下的byte数组。
下面,我们用代码测试下:
分别返回"中" 这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组,并查看数组的长度。来验证不同编码下区别。
public class Test {
public static void main(String[] args) throws Exception {
byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1");
("GBK 编码的长度:"+b_gbk.length);
("UTF-8 编码的长度:"+b_utf8.length);
("ISO8859-1编码的长度:"+b_iso88591.length);
}
}
运行结果:
GBK 编码的长度:2
UTF-8 编码的长度:3
ISO8859-1编码的长度:1
2、new String(byte[],decode)方法
new String(byte[], decode) 方式,可以把 "中"字通过getBytes方法得到的数组还原成字符串。
new String(byte[],decode) 方法的功能:就是使用指定的decode编码来将byte[]解析成字符串。
修改下代码:
public class Test {
public static void main(String[] args) throws Exception {
byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1");
String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");
("GBK 编码的字符串:"+ s_gbk);
("UTF-8 编码的字符串:"+ s_utf8);
("ISO8859-1编码的字符串:"+ s_iso88591);
}
}
运行结果:
GBK 编码的字符串:中
UTF-8 编码的字符串:中
ISO8859-1编码的字符串:?
观察上面的结果,发现s_gbk和s_utf8可以还原出"中"字,而s_iso88591是?(可以理解为乱码)。
为什么使用ISO8859-1编码再组合之后,无法还原"中"字?
那是因为 ISO8859-1 的编码表根本就不包含汉字字符,所以也就无法通过 "中".getBytes("ISO8859-1"); 来得到正确的"中"字在ISO8859-1中的编码值了。所以通过newString()来还原就更是无从谈起。
因此通过(String decode)方法来得到byte[]时,一定要确定decode的编码表中确实存在String表示的码值,这样得到的byte[]数组才能正确被还原。
那么如何使 iso8859-1编码 支持中文?
// 得到ISO8859-1编码字符
String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1")
// 还原,得到正确的中文汉字"中"
String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")