现在的位置: 首页 > 综合 > 正文

你真的了解中英文字符么–str.length()与str.getBytes().length的区别

2013年09月17日 ⁄ 综合 ⁄ 共 1835字 ⁄ 字号 评论关闭

项目中一个很小的细节让我深思,工作这么久了,渐渐的竟然又“想当然”了。

项目中与第三方回调的时候需要给第三方返回报文,而这个报文不能返回trunk模式,所以在返回报文之前要设置返回报文的长度,可是我用了str.length()去获取返回报文的长度的时候控制台打印的真实的报文确实缺少了一部分内容,这个问题开始觉得很奇怪,经过各种实验,终于知道了原因。(关于trunk模式的问题请参考博客:返回xml非chunked模式

具体原因我就不详述了,相信读者看到下面这段代码及输出结果的时候就知道答案了,另外,对于同一段代码,我这有了两个运行的结果,如果你不知道答案,又想知道答案的话,一方面,你可以自己运行一遍(记得不要改代码哦),另一方面,你可以给我评论,我会第一时间给你回复的哦!

代码如下:

package test;

import java.io.UnsupportedEncodingException;

public class Test {

	public static void main(String[] args) {
		String str = "我来做个测试,中文";
		System.out.println(str);
		System.out.println("str.length:" + str.length());
		System.out.println("str.getBytes().length:" + str.getBytes().length);
		try {
			System.out.println("str.getBytes('utf-8').length:" + str.getBytes("utf-8").length);
			System.out.println("str.getBytes('GBK').length:" +str.getBytes("GBK").length);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		System.out.println("--------------------------------------");
		String str1 = "I give the test, English";
		System.out.println(str1);
		System.out.println("str1.length:" + str1.length());
		System.out.println("str1.getBytes().length:" + str1.getBytes().length);
		try {
			System.out.println("str1.getBytes('utf-8').length:" + str1.getBytes("utf-8").length);
			System.out.println("str1.getBytes('GBK').length:" +str1.getBytes("GBK").length);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
}

第一种结果:

我来做个测试,中文

str.length:9
str.getBytes().length:27
str.getBytes('utf-8').length:27
str.getBytes('GBK').length:18
--------------------------------------
I give the test, English
str1.length:24
str1.getBytes().length:24
str1.getBytes('utf-8').length:24

str1.getBytes('GBK').length:24

第二种结果:

我来做个测试,中文
str.length:9
str.getBytes().length:18
str.getBytes('utf-8').length:27
str.getBytes('GBK').length:18
--------------------------------------
I give the test, English
str1.length:24
str1.getBytes().length:24
str1.getBytes('utf-8').length:24
str1.getBytes('GBK').length:24

抱歉!评论已关闭.