Java编码

之前看到有人说Java中汉字占两字节,现在就来纠正一下这个错误。

  1. 首先,这个问题依赖具体的编码格式:
    GBK:
public class Main {
    public static void main(String[] args) {
        System.out.println("GBK编码:"+"学习".getBytes().length);
        System.out.println("GBK编码:"+"Java".getBytes().length);
    }
}

输出结果:这里写图片描述
由结果可以看出,GBK编码,一个汉字占两个字节
UTF-8:

public class Main {
    public static void main(String[] args) {
        System.out.println("UTF-8编码:"+"学习".getBytes().length);
        System.out.println("UTF-8编码:"+"Java".getBytes().length);
    }
}

这里写图片描述
由结果可以看出,UTF-8编码,一个汉字占3个字节

2.一共有多少汉字?
据说,《中华字海》是收录汉字最多的大型字书,共收录楷书汉语单字85568个。
但是,2^16=65536,GBK不可能收录所有的汉字(当然汉字也收录不完,因为会被一直创造),日常生活也用不了8万多汉字。
1995年的汉字扩展规范GBK1.0包含21886个符号,它分为字符区和图形符号区。字符区包括21003个字符。
具体关于汉字编码的问题,可以查看以下链接:
http://zhidao.baidu.com/link?url=jtHQLRqdtpERRYikquNzmChiOnCV2KfPjUCRI4jxhhSRkeZLd4sW44_sy9zETamJbgH4f3Ih1Y3EPZZkvkV96q
3.UTF-8与Unicode的关系
UTF-8是Unicode的实现方式之一,它规定了字符如何在计算机中存储、传输等,详情可查看一下链接:
http://alexiter.iteye.com/blog/1533109

Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
——————–+———————————————
0000 0000–0000 007F | 0xxxxxxx
0000 0080–0000 07FF | 110xxxxx 10xxxxxx
0000 0800–0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000–0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值