计算文本(字符串)所占字节数,大家第一个想到的应该就是String类的getBytes()方法,该方法返回的是字符串对应的字节数组,再计算数组的length就能够得到字符串所占字节数。例如:
public static void main(String []args) {
// 运行结果:12
System.out.println("旭日东升".getBytes().length);
}
上面的示例中计算了四个个中文所占的字节数为12,即一个汉字占3个字节。真的是这样吗?其实我们忽略了一个问题:对于不同的编码方式,中文所占的字节数也不一样!这到底要怎么呢?在上面的例子中,我们并没有指定编码方式,那么会使用默认的编码方式。先来看我得出的三条结论:
1)如果上面的例子运行在默认编码方式为ISO8859-1的操作系统平台上,计算结果是4;
2)如果上面的例子运行在默认编码方式为gb2312或gbk的操作系统平台上,计算结果是8;
3)如果上面的例子运行在默认编码方式为utf-8的操作系统平台上,计算结果是12;
如果真的是这样,是不是意味着String.getBytes()方法在我们的系统平台上默认采用的是utf-8编码方式呢?我们再来看一个例子:
public static void main(String []args) throws UnsupportedEncodingException {
// 运行结果:4
System.out.println("旭日东升".getBytes("ISO8859-1").length);
// 运行结果:8
System.out.println("旭日东升".getBytes("GB2312").length);
// 运行结果:8
System.out.println("旭日东升".getBytes("GBK").length);
// 运行结果:12
public static void main(String []args) {
// 运行结果:12
System.out.println("旭日东升".getBytes().length);
}
上面的示例中计算了四个个中文所占的字节数为12,即一个汉字占3个字节。真的是这样吗?其实我们忽略了一个问题:对于不同的编码方式,中文所占的字节数也不一样!这到底要怎么呢?在上面的例子中,我们并没有指定编码方式,那么会使用默认的编码方式。先来看我得出的三条结论:
1)如果上面的例子运行在默认编码方式为ISO8859-1的操作系统平台上,计算结果是4;
2)如果上面的例子运行在默认编码方式为gb2312或gbk的操作系统平台上,计算结果是8;
3)如果上面的例子运行在默认编码方式为utf-8的操作系统平台上,计算结果是12;
如果真的是这样,是不是意味着String.getBytes()方法在我们的系统平台上默认采用的是utf-8编码方式呢?我们再来看一个例子:
public static void main(String []args) throws UnsupportedEncodingException {
// 运行结果:4
System.out.println("旭日东升".getBytes("ISO8859-1").length);
// 运行结果:8
System.out.println("旭日东升".getBytes("GB2312").length);
// 运行结果:8
System.out.println("旭日东升".getBytes("GBK").length);
// 运行结果:12
System.out.println("旭日东升".getBytes("UTF-8").length);
}