Java编码 Unicode是全球标准字符集,是Java所为String采用的编码方式,任何字符用2个字节表示。String实例中保存有一个char[]字符数组。string.getByte()方法可以获得到这个字符串实例在指定编码下的字节数组,注意的是不带参数的getByte方法使用OS默认的字符集,比如GB2312(简体中文)。所以要得到Unicode下的字节数组,需要这样:string.getBytes(“unicode”)(此处注意见下文)。如果使用new String(byte[], Charset)构造,可以将已知编码的字节数组重新拼成一个String实例,即用指定的Charset去组合字节为Unicode字符罢了。同理,不带Charset的String构造使用OS默认字符集。 因此,得到UTF-8的字节数组,按以下步骤: 1 2 3 4 String str = "梦"; byte[] bytes = str.getBytes("UTF-8"); "使用UTF-8解码字符串得到的UTF-8字节数组" String str2 = new String(bytes, "utf8"); "按照当初被解码的方式(utf8)重新组成Java String类" str.equals(str2) == true; "使用大小写不同的编码写法,来区别不同API中参数代表的意义" 所以,str = new String(str.getBytes(Charset), Charset) 什么都没有做,除了新建了个String对象。 但是如果你要获取unicode的字节数组,却有非常多的选择,而且很容易出错。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 void echoBytesTest() { String s = "梦"; echoBytes(s, "Unicode"); echoBytes(s, "UnicodeBig"); echoBytes(s, "UnicodeLittle"); echoBytes(s, "UnicodeBigUnmarked"); echoBytes(s, "UnicodeLittleUnmarked"); echoBytes(s, "UTF-16"); echoBytes(s, "UTF-16BE"); echoBytes(s,