Fork me on GitHub

常用字符集编码

简介

常见的编码格式有ASCII、ISO-8859-1、GB2312、GBK、GB18030、UNICODE等,其中GB2312、GBK、GB18030、UTF-8、UTF-16都可以用来表示中文。

为什么有编码

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

常用编码

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标准表。

最顶端1位二进制为0

ISO-8859-1

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

ISO-8859-1也是单字节编码,但它是一个8位的容器,它能表示256个字符。

最顶端1位也用来表示具体含义

GB2312

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

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

每个汉字及符号以两个字节来表示,通常采用EUC储存方法,以便兼容于ASCII。

GBK

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

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

不管中英文都是以两个字节来表示

GB18030

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

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

ANSI

ANSI不是一种编码,他是微软为了满足不同的客户需求,而在系统中默认的一种编码,即美国国内的系统默认就用ASCII编码,中国人的系统默认就用GBK编码,韩国人的系统默认就用EUC-KR编码。

相关文章

unicode家族:https://www.cnblogs.com/xiaofengshan/p/13287369.html
16进制字符串和byte数组进行相互转换:https://www.cnblogs.com/xiaofengshan/p/15224551.html

参考

ANSI: https://blog.csdn.net/imxiangzi/article/details/77370160
ASCII、ISO-8859-1、GB2312: https://blog.csdn.net/moakun/article/details/80178590

posted @ 2021-09-06 20:30  晨度  阅读(1035)  评论(0编辑  收藏  举报