ASCII码、ISO8859

您所在的位置:网站首页 gbk是国际通用编码 ASCII码、ISO8859

ASCII码、ISO8859

2022-12-16 17:02| 来源: 网络整理| 查看: 265

目录 为什么需要编码?1、ASCII码 2、ISO-8859-1 通常叫做Latin-13、GB23124、GBK5、GB180306、UNICODE7、UTF-168、UTF-8

为什么需要编码?

计算机中最小的存储单位是字节(byte),一个字节所能表示的字符数又有限,1byte=8bit,一个字节最多也只能表示255个字符,而世界上的语种又多,都有各种不同的字符,无法用一个byte表示,所以java中的char表示字符就是来解决这种编码问题的,一个char占两个字节,所以从char到最小单位byte之间必须经过编码,反之为解码。

其实,编码解码就是完成的翻译过程(“翻译”很容易理解吧),各种编码方式就是一部部字典。

1、ASCII码

全称为American Standard Code for Information Interchange,美国信息交换标准代码,这是世界上最通用的单字节编码系统,主要用来显示现代英语及其他西欧语言。

ASCII码用7位表示,只能表示128个字符,0~31表示控制字符如回车、退格、删除等;32~126表示打印字符即可以通过键盘输入并且能显示出来的字符,

其中48~57为0到9十个阿拉伯数字,65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等,具体可以参考ASCII标准表。

2、ISO-8859-1 通常叫做Latin-1

该编码是在ASCII编码的基础上扩展出来的,但它仍然是单字节编码,总共只能表示256个字符。

既然ASCII只能表示128个字符,显示是不能完全表示完的,所以ISO-8859-1扩展了ASCII编码,在ASCII编码之上又增加了西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号,它是向下兼容ASCII编码的。

3、GB2312

GB2312的全称是《信息技术 中文编码字符集》,它是双字节编码,如果字符在ASCII字符集中,便采用单字节编码,编码范围是A1-F7,其中A1-A9是符号区,总共包含682个符号;B0-F7是汉字区,包含6763个汉字。

全称为信息交换用汉字编码字符集,是中国于1980年发布,主要用于计算机系统中的汉字处理。GB2312主要收录了6763个汉字、682个符号。

GB2312覆盖了汉字的大部分使用率,但不能处理像古汉语等特殊的罕用字,所以后来出现了像GBK、GB18030这种编码。

4、GBK

GBK的全称是《汉字内码扩展规范》,它的出现是为了扩展GB2312,它的编码范围是8140-FEFE(去掉XX7F),总共有23940个码位,能表示21003个汉字,它的编码是和GB2312兼容的

GBK,全称为Chinese Internal Code Specification,即汉字内码扩展规范,于1995年制定。它主要是扩展了GB2312,在它的基础上又加了更多的汉字,它一共收录了21003个汉字。

GBK是向下兼容GB2312编码的,也就是说GB2312编码的汉字可以用GBK正常解码不会出现乱码,但用GBK编码的汉字用GB2312解码就不一定了。

5、GB18030

GB18030全称汉字内码扩展规范,是现在最新的内码字集于2000年发布,并于2001年强制执行,包含了中国大部分少数民族的语言字符,收录汉字数超过70000余个。

它主要采用单字节、双字节、四字节对字符编码,它是向下兼容GB2312和GBK的,虽然是我国的强制使用标准,但在实际生产中很少用到,用得最多的反而是GBK和GB2312。

6、UNICODE

为了自己的语言能在计算机中正常显示,每个国家和地区都有各自的编码,所以编码多了谁也不认识对方的编码,这时候ISO组织就提出了一种新的编码叫UNICODE编码让全球的文化、字符、符号都能支持。UNICODE在制定时计算机容量已不是问题,所以设计成了固定两个字节,所有的字符都用16位表示,包括之前只占8位的英文字符等,所以会造成空间的浪费,UNICODE在很长的一段时间内都没有得到推广应用。

7、UTF-16

UTF-16的出现是ISO想要创建一个全新的超语言字典,世界上所有的语言都可以通过这个字典来相互翻译,可想而知,这个字典是多么的复杂、庞大。UTF-16用两个字节来表示Unicode的转化格式(两个字节就是16个bit,所以要UTF-16),采用的是定长的表示方法,即任何字符都可以用两个字节表示。这样表示字符就是变得的非常方便。但是,也有一个缺陷,就是很大一部分的字符用一个字节就可以表示了,UTF-16却用两个字节,有些浪费存储空间。所以有另一个编码方式就出现了,也就是UTF-8。

UTF-16是UNICODE的具体实现,16即16位,UTF-16即是这个来由,定义了UNICODE字符在计算机中的存储方式,UTF-16同样使用了两个字节来表示任何字符,这样使得操作字符串非常高效,这也是java把UTF-16作为字符在内存中存储的格式的重要原因。

UTF-16适合在磁盘与内存之间使用,字符和字节的相互转换会更加简单和高效,但不适合在网络上传输,因为网络传输可能会损坏字节流。

8、UTF-8

UTF-8采用了一种变长技术,每个编码区域有不同的字码长度,不同类型的字符可以由1-6个字节组成。

UTF-8的编码规则如下:

如果是1个字节,最高位为0,则表示这是1个ASCII字符。可见,所有ASCII编码已经是UTF-8了

如果是1个字节,以11开头,则连续的1的个数暗示这个字符的字节数,例如:110xxxxx代表它是双字节UTF-8字符的首字节

如果是1个字节,以10开始,表示它不是首字节,则需要向前查找才能得到当前字符的首字节。

虽然UTF-16很高效,但也是UNICODE最大的坏处,使得所有单字节字符一定要占两个字节,存储空间放大了一倍,这明显消耗了资源,不符合现在互联网高速发展的现状。所以有了UTF-8,它是UNICODE的一种可变长度字符编码的实现,它可以使用1~6个定长字节来编码UNICODE字符。

UTF-8对ASCII字符使用单字节存储,单个字符损坏也不会影响后面的字符,所以UTF-8非常适合在网络上面传统,也是现在使用最广泛的编码之一。

如果要表示中文,UTF-8编码效率要低于GBK,高于UTF-16,所以它也是除了GBK之外最理想的编码方式。

转载于:https://www.cnblogs.com/panchanggui/p/9370629.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3