Java编码

来源:互联网 发布:windows arp命令事例 编辑:程序博客网 时间:2024/06/05 05:34

之前看到有人说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

0 0