中文字符的字节数
Java语言中,中文字符所占的字节数取决于字符的编码方式,一般情况下,采用ISO8859-1
编码方式时,一个中文字符与一个英文字符一样只占1个字节;采用GB2312
或GBK
编码方式时,一个中文字符占2个字节
;而采用UTF-8
编码方式时,一个中文字符会占3个字节
。我们可以通过String类的getBytes(String charsetName)方法来获取到字符串以指定编码方式编码后所得到的字节数组,然后字节数组的长度就是该字符串在指定编码方式下所占的字节数。
下面为一个测试示例:
public static void main(String []args) throws UnsupportedEncodingException {
// 运行结果:2
System.out.println("测试".getBytes("ISO8859-1").length);
// 运行结果:4
System.out.println("测试".getBytes("GB2312").length);
// 运行结果:4
System.out.println("测试".getBytes("GBK").length);
// 运行结果:6
System.out.println("测试".getBytes("UTF-8").length);
}
注意: String类
的不带参数的getBytes()
方法会以程序所运行平台的默认编码方式为准来进行转换,在不同平台下就会有不同的结果,因此建议使用指定编码方式的getBytes(String charsetName)
方法。
getBytes方法
getBytes
用于获取任意内容的字节数组
,比如如下获取中文字符的字节数组
//Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.
byte[] bytes = "测试".getBytes();
System.out.println(Arrays.toString(bytes));
System.out.println(bytes.length);//6
可以传入一个参数,字符集编码
,不传就是系统默认的
byte[] bytes = "测试".getBytes("GBK");
System.out.println(Arrays.toString(bytes));//[-78, -30, -54, -44]
System.out.println(bytes.length);//4
再比如
byte[] bytes = "测试".getBytes("UTF-8");
System.out.println(Arrays.toString(bytes));[-26, -75, -117, -24, -81, -107]
System.out.println(bytes.length);//6
源码
public byte[] getBytes() {
return StringCoding.encode(value, 0, value.length);
}
总结
getBytes
方法用于返回字符串的字节数组
- 中文字符
GBK
编码时,一个字符2个
字节,UTF-8
编码时,一个字符3个字节