弄清java中的字节与字符

问题

在java中,一个字符等于多少字节?

或者更详细的问:在java中,一个英文字符等于多少字节?一个中文字符等于多少字节?

 

答案

Java采用unicode来表示字符,java中的一个char是2个字节,一个中文或英文字符的unicode编码都占2个字节,但如果采用其他编码方式,一个字符占用的字节数则各不相同。

在 GB 2312 编码或 GBK 编码中,一个英文字母字符存储需要1个字节,一个汉子字符存储需要2个字节。

在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。

在UTF-16编码中,一个英文字母字符存储需要2个字节,一个汉字字符储存需要3到4个字节(Unicode扩展区的一些汉字存储需要4个字节)。

在UTF-32编码中,世界上任何字符的存储都需要4个字节。

 

举个例子:

java代码如下:

 

String str = "测试test";
int byte_len = str.getBytes().length;
int len = str.length();
System.out.println("字节长度为:" + byte_len);
System.out.println("字符长度为:" + len);

 

如果编码方式为GBK,对于字符串“测试test”,字符长度为6,字节长度为8。

如果编码方式为UTF_8,对于字符串“测试test”,字符长度为6,字节长度为10。

 

注意:字符串的length()方法返回的是字符长度,一个汉子表示一个字符,一个字母也表示一个字符。

 

unicode和UTF_8有什么关系

UTF-8就是在互联网上使用最广的一种unicode的实现方式。unicode的其他实现方式还包括UTF-16和UTF-32。

UTF-8的最大特点是,它是一种可变的编码方式。

详情请自行百度~

 

那么问题来了

说了这么多还是不明白,到底java中一个char表示几个字节?请看下面解释

复制代码

    public class Test {  
      
      
        public static void main(String[] args) {  
            String str= "测";  
            char x ='测';  
            byte[] byteStr=null;  
            byte[] byteChar=null;  
            try {  
                byteStr = str.getBytes("utf-8");  
                byteChar = charToByte(x);  
            } catch (Exception e) {  
          
                e.printStackTrace();  
            }  
            System.out.println("byteStr :"+byteStr.length);  
            System.out.println("byteChar:"+byteChar.length);  
        }  
        public static byte[] charToByte(char c) {   
            byte[] b = new byte[2];   
            b[0] = (byte) ((c & 0xFF00) >> 8);   
            b[1] = (byte) (c & 0xFF);   
            return b;   
        }  
    }  

复制代码

 

运行结果:

byteStr:3
byteChar:2

  

java是用unicode来表示字符,"测"这个中文字符的unicode就是2个字节。

 String.getBytes(encoding)方法是获取指定编码的byte数组表示,

如果不指定encoding则取系统默认的encoding。

 

作者:ouym

出处:http://www.cnblogs.com/ouym/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值