String.getBytes(charsetName),这个方法很多人都用过,可是有没有试过temp.getBytes("Unicode");这样的用法,它的返回值很奇怪,第1和第2个字节是-1或-2,比如下面的代码,你能想象出它的结果吗? String temp = "a"; try { byte[] unicodes = temp.getBytes("Unicode"); System.out.println("unicodes=" + unicodes.length); for (int i = 0; i < unicodes.length; i++) { System.out.println(unicodes[i]); } unicodes = temp.getBytes("UnicodeLittleUnmarked"); System.out.println("unicodes=" + unicodes.length); for (int i = 0; i < unicodes.length; i++) { System.out.println(unicodes[i]); } unicodes = temp.getBytes("UnicodeBigUnmarked"); System.out.println("unicodes=" + unicodes.length); for (int i = 0; i < unicodes.length; i++) { System.out.println(unicodes[i]); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } 输出结果: unicodes=4-1-2970unicodes=2970unicodes=2097 为什么会有这种结果呢?蓝色的返回了四个字节,-1,-2,是字节顺的一种表示,这是由sun的类库实现,指示如果没有指定字节就使用默认的UnicodeLittle(在Window平台,别的平台我没测试),但为了标识这种字节顺,就使用了-1,-2在前面表示。 黑色的字,是UnicodeLittleUnmarked的结果,其返回字节只是两个字节,这与Unicode的编码相符合,注意到97,0与使用Unicode时后两个字节顺序一样。 红色的字,是使用UnicodeBigUnmarked的结果,字节顺与Little相反,也没有-1,-2. 由以上应该知道,temp.getBytes("Unicode");应该小心使用,应该注意它返回的-1,-2,这两个字节,因为在一些网络程序中,特别是当对方是由java以外的语言编写,有可能不会使用这种方式来标识字节顺,因此要了解对方的细节,这样才能保证数据的准确传递。