中文占用字节数求解 characterstringjava 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这里用的是UTF-8编码吧, 你改成:System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);中文字符应该是 2 了; 你这里用的是UTF-8编码吧, 你改成:System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);中文字符应该是 2 了;我检查我的环境用也是UTF-8编码;System.out.println(Charset.defaultCharset()); 你这里用的是UTF-8编码吧, 你改成:System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);中文字符应该是 2 了;嗯,中文基本明白了,英文字符呢,英文字符为什么 是16比特位,但是后面却显示是一个字节呢? 你这里用的是UTF-8编码吧, 你改成:System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);中文字符应该是 2 了;嗯,中文基本明白了,英文字符呢,英文字符为什么 是16比特位,但是后面却显示是一个字节呢?这个是字符集编码问题,在GBK中,英文只有是全角字符才是2个字节,对于一般的英文字符,也就是ASCII编码了,一个字节了; http://blog.csdn.net/zhanghenglei/article/details/7439345这篇博客中 说 java是用unicode来表示字符,"中"这个中文字符的unicode就是2个字节。实际上: String str = "a中"; for(int i=0;i<str.length();i++){ Character ch = str.charAt(i); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("ASCII").length+" ASCII"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("UNICODE").length+" UNICODE"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("UTF-8").length+" UTF-8"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length+" GBK"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GB2312").length+" GB2312"); System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("ISO-8859-1").length+" ISO-8859-1"); }结果:a 16 1 ASCIIa 16 4 UNICODEa 16 1 UTF-8a 16 1 GBKa 16 1 GB2312a 16 1 ISO-8859-1国 16 1 ASCII国 16 4 UNICODE国 16 3 UTF-8国 16 2 GBK国 16 2 GB2312国 16 1 ISO-8859-1显示 UNICODE编码是占 4个字节这是为什么 字符编码问题。楼主要了解常用的字符编码。ASCII、GBK、Unicode、UTF-8了解了字符编码的规则,自然就明白是怎么回事。当然,首先要了解,什么事字符编码。 timertask问题 关于flush的问题 Socket数据的显示,在线等!!! java面试题(高手解答) 再论接口与抽象类 求2道题的答案 关于容器equals()方法的问题! java 中可不可以根据文件扩展名找到对应的图标呀? 迷你记事本,欢迎大家下载使用,内有地址. 用什么开发工具,有什么好资料?----一个java初学者需要大家帮忙。。。 java连接数据库例子 使用label.SetText标签不改变,但内存中好像改变了?
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);
中文字符应该是 2 了;
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);
中文字符应该是 2 了;
我检查我的环境用也是UTF-8编码;
System.out.println(Charset.defaultCharset());
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);
中文字符应该是 2 了;
嗯,中文基本明白了,
英文字符呢,英文字符为什么 是16比特位,但是后面却显示是一个字节呢?
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length);
中文字符应该是 2 了;
嗯,中文基本明白了,
英文字符呢,英文字符为什么 是16比特位,但是后面却显示是一个字节呢?
这个是字符集编码问题,在GBK中,英文只有是全角字符才是2个字节,对于一般的英文字符,也就是ASCII编码了,一个字节了;
这篇博客中 说 java是用unicode来表示字符,"中"这个中文字符的unicode就是2个字节。
实际上: String str = "a中";
for(int i=0;i<str.length();i++){
Character ch = str.charAt(i);
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("ASCII").length+" ASCII");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("UNICODE").length+" UNICODE");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("UTF-8").length+" UTF-8");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GBK").length+" GBK");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("GB2312").length+" GB2312");
System.out.println(ch+" "+ch.SIZE+" "+String.valueOf(ch).getBytes("ISO-8859-1").length+" ISO-8859-1");
}结果:
a 16 1 ASCII
a 16 4 UNICODE
a 16 1 UTF-8
a 16 1 GBK
a 16 1 GB2312
a 16 1 ISO-8859-1
国 16 1 ASCII
国 16 4 UNICODE
国 16 3 UTF-8
国 16 2 GBK
国 16 2 GB2312
国 16 1 ISO-8859-1显示 UNICODE编码是占 4个字节
这是为什么
楼主要了解常用的字符编码。
ASCII、GBK、Unicode、UTF-8了解了字符编码的规则,自然就明白是怎么回事。
当然,首先要了解,什么事字符编码。