String str="a";
System.out.println(str.getBytes().length);
String底层是字符数组,字符用unicode编码,unicode用两个字节代表一个字符,为什么这个结果是1?不是2
String str="中";
System.out.println(str.getBytes().length); 这个输出就是2或者说string的编码不是unicode?
System.out.println(str.getBytes().length);
String底层是字符数组,字符用unicode编码,unicode用两个字节代表一个字符,为什么这个结果是1?不是2
String str="中";
System.out.println(str.getBytes().length); 这个输出就是2或者说string的编码不是unicode?
Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。 因此Java要对这些字节流经行转化。
char是unicode的,而byte是字节,
getByte()方法是使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。汉字占两个字节,英文占一个字节,所以当字符为中文时,返回的byte数组的length为2,英文的为length为1...
platform's default charset, storing the result into a new byte array.所以看看你的机器用的是什么编码
可以s.getBytes(Charset.forName("UNICODE")).length看看
查看自己机器的编码方式可以这样:Charset.defaultCharset()
public static void main(String args[]) throws Exception{
String str="a";
System.out.println(str.getBytes().length); //1
System.out.println(str.getBytes("GB2312").length); //1
System.out.println(str.getBytes("utf-8").length); //1
System.out.println(str.getBytes("UTF-16BE").length); //2
System.out.println(str.getBytes("UTF-16LE").length); //2
System.out.println(str.getBytes("UTF-16").length); //4
}