1个汉字的字节数真是2吗?

 

问题缘由是最近做了一个简单的试验,无意间发现并不是这样的。先附上代码,如下:

public class ChineseBytes {

	public static void main(String[] args) {

		String str=new String("你好,世界。");
		System.out.print("+");                          
        for (int i = 0; i < str.getBytes().length; i++) {               
            System.out.print("-");                      
        }
        System.out.println("+"); 
        System.out.println("你好,世界。"); 
		
	}
		 
	}

结果如下:

+------------------+
你好,世界。

    仔细一下就不对劲,平时我们都讲一个中文对应2个字节,我无聊数了一下,刚好18个字节,也就是刚好一个中文对应3个字节,难道真的是巧合吗?然后就去查了相关的资料,发现不同的编码方式字节码是不同,由于我的eclipse用的编码方式是UTF-8(因为有段时间打开网上的源码中文注释是乱码的,原是使用GBK的,才改用的UTF-8),刚好是三倍。资料显示,如果是采用GBK的话,会是2个字节,于是我试了一下:

+------------+
你好,世界。

    结果果然如此。下表总结了不同的编码对应的字节数。

英文字母:

 

GB2312

 

GBK

 

GB18030

 

ISO-8859-1

 

UTF-8

 

UTF-16

 

UTF-16BE

 

UTF-16LE

 

 

中文汉字:

 

GB2312

 

GBK

 

GB18030

 

ISO-8859-1

 

UTF-8

 

UTF-16

 

UTF-16BE

 

UTF-16LE

 

 

我们可以看到,UTF-16不管中文还是英文,都是对应4个字节。英文多数都是对应1个字节,和平常所说的一个英文对应一个字节很符合,除了UTF-8以后的都是1;西欧编码(ISO-8859-1)的中文居然只有1个字节。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值