【Java随记】字符集

前言

对于电脑中的文件,如果我们想要通过程序来操作文件中的内容,我们得合理运用好IO流,但是在学习IO流之前,我们得搞清楚一个前置知识——字符集,只有把字符集搞明白,学习并运用IO流的时候才会更加丝滑

一、字符集

1.1 字符集的来历

为了能够让计算机能够处理字符,于是美国人就把他们会用到的每一个字符进行了编码(所谓编码,就是为一个字符编一个二进制数据),如下图所示:

美国人常用的字符有英文字母,标点符号,数字以及一些特殊字符,这些字符一共也不到128个,所以他们用1个字节来存储1字符就够了,美国人把他们用到的字符和字符对应的编码总结成了一张码表,这张码表也就是ASCII码表(也被称为ASCII字符集)

其实计算机只在美国用是没有问题的,但是计算机慢慢的普及到全世界,当普及到中国的时候,在计算机中想要存储中文,那ASCII字符集就不够用了,因为中文太多了,随便数一数也有几万个字符。

于是中国人为了在计算机中存储中文,也编了一个中国人用的字符集叫做GBK字符集,这里面包含2万多个汉字字符,GBK中一个汉字采用两个字节来存储,为了能够显示英文字母,GBK字符集也兼容了ASCII字符集,在GBK字符集中一个字母还是采用一个字节来存储。

1.2 汉字和字母的编码特点

需要我们注意汉字和字母的编码特点:

1、如果是存储字母,采用1个字节来存储,一共8位,其中第1位是0

2、如果是存储汉字,采用2个字节来存储,一共16位,其中第1位是1

 当读取文件中的字符时,通过识别读取到的第1位是0还是1来判断是字母还是汉字

如果读取到第1位是0,就认为是一个字母,此时往后读1个字节。

如果读取到第1位是1,就认为是一个汉字,此时往后读2个字节。

1.3 Unicode字符集

其实虽然GBK字符集来表示中国人使用的文字,那世界上还有很多其他的国际,他们也有自己的文字,他们也会希望自己国家的文字在计算机中处理,于是其他国家也在搞自己的字符集,就这样全世界就搞了上百个字符集,而且各个国家的字符集互不兼容。这样其实很不利于国际化交流,举个例子就是一个文件在我们国家的电脑打开的好好的,但是在其他国家上打开就是乱码了。

为了解决各个国家字符集互不兼容的问题,由国际化标准组织牵头,设计了一套全世界通用的字符集,叫做Unicode字符集。在Unicode字符集中包含了世界上所有国家的文字,一个字符采用4个字节存储。

在Unicode字符集中,采用一个字符4个字节的编码方案,又造成了另一个问题:如果是说英语的国家,他们只需要用到26大小写字母,加上一些标点符号就够了,本身一个字节就可以表示完,用4个字节就有点浪费了。

于是又对Unicode字符集中的字符进行了重新编码,一共设计了三种编码方案。

分别为:

1、UTF-32

2、UTF-16

3、UTF-8

其中比较常用的编码方案是UTF-8

接下来是UTF-8这种编码方案的特点。

1、UTF-8是一种可变长的编码方案,一共分为4个长度区

2、英文字母、数字占1个字节兼容(ASCII编码)

3、汉字字符占3个字符

4、极少数字符占4个字节

1.4 字符集小结

ASCII字符集:

《美国信息交换标准代码》,包含英文字母、数字、标点符号、控制字符

特点:1个字符占1个字节

GBK字符集:

中国人自己的字符集,兼容ASCII字符集,还包含2万多个汉字

特点:1个字母占用1个字节;1个汉字占用2个字节

Unicode字符集:

包含世界上所有国家的文字,有三种编码方案,最常用的是UTF-8

UTF-8编码方案:英文字母、数字占1个字节兼容(ASCII编码)、汉字字符占3个字节

1.5 编码和解码

其实String类中就提供了相应的方法,可以完成编码和解码的操作。

1、编码:把字符串按照指定的字符集转换为字节数组

2、解码:把字节数组按照指定的字符集转换为字符串

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值