JAVA有哪几种常见的编码?

不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。

由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语。这个翻译的过程就是编码。

所以可以想象只要不是说英语的国家要能够使用计算机就必须要经过编码。这看起来有些霸道,但是这就是现状,这也和我们国家现在在大力推广汉语一样,希望其它国家都会说汉语,以后其它的语言都翻译成汉语,我们可以把计算机中存储信息的最小单位改成汉字,这样我们就不存在编码问题了。

总的来说,编码的原因可以总结为:计算机中存储信息的最小单元是一个字节,即8个bit,所以能表示的字符范围是0-255个;人类要表示的符号太多,无法用一个字节来完全表示。要解决这个矛盾必须要有一个新的数据结构char,从char到byte必须编码。

常见的编码表

① ASCII:美国标准信息交换表

② ISO8859-1:拉丁码表,欧洲码表

③ GB2312:中国的中文编码表

④ GBK:中国的中文编码表升级

⑤ GB{{18030:0}}:GBK的取代版本

⑥ BIG5:通用于香港、台湾地区的繁体字编码方案

⑦ UTF-8:最多用3个子节表示一个字符

⑧ Unicode:国际标准码,融合了多种文字,所有的文字都用两个子节来表示,Java语言使用的就是该码表

他们可以被看做字典,他们规定了转化的规则,按照这个规则可以让计算机正确地标识我们的字符。目前的编码格式很多,如GB2312,GBK,UTF-8,UTF-16都可以标识一个汉字,那我们到底选择哪种编码格式来存储汉字呢?这就要考虑其他因素呢,是存储空间重要还是编码的效率重要。

根据这些因素来正确选择编码格式,下面简要介绍一下几种编码格式。

ASCII 码
学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来。
ISO-8859-1
128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了大多数西欧语言字符,所有应用的最广泛。ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符。
GB2312
它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。
GBK
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 {{23940:0}} 个码位,它能表示 {{21003:0}} 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。
GB{{18030:0}}
全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312 编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛。
UTF-8
UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。
UTF-8 有以下编码规则:
如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。
如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。
如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节

                   编码过程:是把看得懂的变成看不懂的 
                    解码过程:把看不懂的变成看得懂的

 那么今天就到这里了,如果你跟我一样如果喜欢java,也在学习java的道路上奔跑,欢迎你加入java学习群:527999065 群内每天都会分享java最新业内资料,共同交流学习,让学习变(编)成(程)一种习惯!

猜你喜欢

转载自blog.csdn.net/qq_28263265/article/details/82587874