计算机各种常见编码格式简介与分析
⽬录
编码
编码是⽤预先规定的⽅法将⽂字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。为保证编码的正确性,编码要规范化、标准化,即需有标准的编码格式。常见的编码格式有ASCII、ANSI、GBK、GB2312、UTF-8、GB18030和UNICODE等。
1.BCD码(Binary-Coded Decimal)
BCD码(Binary-Coded Decimal),⽤4位⼆进制数来表⽰1位⼗进制数中的0~9这10个数码,是⼀种⼆进制的数字编码形式,⽤⼆进制编码的⼗进制代码。BCD码这种编码形式利⽤了四个位元来储存⼀个⼗进制的数码,使⼆进制和⼗进制之间的转换得以快捷的进⾏。
压缩BCD码与⾮压缩BCD码的区别—— 压缩BCD码的每⼀位⽤4位⼆进制表⽰,⼀个字节表⽰两位⼗进制数。例如10010110B表⽰⼗进制数96D;⾮压缩BCD码⽤1个字节表⽰⼀位⼗进制数,⾼四位总是0000,低4位的00009.例如00001000B表⽰⼗进制数8.
1001表⽰0
ASCII 码
学过计算机的⼈都知道 ASCII 码,总共有 128 个,⽤⼀个字节的低 7 位表⽰,0~31 是控制字符如换⾏回车删除等;32~126 是打印字符,可以通过键盘输⼊并且能够显⽰出来。
2.ISO-8859-1 (信息交换⽤汉字编码字符集基本集)
128 个字符显然是不够⽤的,于是 ISO 组织在 ASCII 码基础上⼜制定了⼀些列标准⽤来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了⼤多数西欧语⾔字符,所有应⽤的最⼴泛。ISO-8859-1 仍然是单字节编码,它总共能表⽰ 256 个字符。 GB2312
unicode码和ascii码区别它的全称是《信息交换⽤汉字编码字符集 基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682个符号,从 B0-F7 是汉字区,包含 6763 个汉字。
3.GBK (汉字内码扩展规范)
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加⼊更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表⽰ 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说⽤ GB2312 编码的汉字可以⽤ GBK 来解码,并且不会有乱码。
4.GB18030 (信息交换⽤汉字编码字符集)
全称是《信息交换⽤汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312 编码兼容,这个虽然是国家标准,但是实际应⽤系统中使⽤的并不⼴泛。
5.UTF-16 ( Unicode )
说到 UTF 必须要提到 Unicode(Universal Code 统⼀码),ISO 试图想创建⼀个全新的超语⾔字典,世界上所有的语⾔都可以通过这本字典来相互翻译。可想⽽知这个字典是多么的复杂,关于 Unicode 的详细规范可以参考相应⽂档。Unicode 是 Java 和 XML 的基础,下⾯详细介绍 Unicode 在计算机中的存储形式。
UTF-16 具体定义了 Unicode 字符在计算机中存取⽅法。UTF-16 ⽤两个字节来表⽰ Unicode 转化格式,这个是定长的表⽰⽅法,不论什么字符都可以⽤两个字节表⽰,两个字节是 16 个 bit,所以叫 UTF-16。UTF-16 表⽰字符⾮常⽅便,每两个字节表⽰⼀个字符,这个在字符串操作时就⼤⼤简化了操作,这也是 Java 以 UTF-16 作为内存的字符存储格式的⼀个很重要的原因。
6.UTF-8 ( Unicode )
UTF-16 统⼀采⽤两个字节表⽰⼀个字符,虽然在表⽰上⾮常简单⽅便,但是也有其缺点,有很⼤⼀部
分字符⽤⼀个字节就可以表⽰的现在要两个字节表⽰,存储空间放⼤了⼀倍,在现在的⽹络带宽还⾮常有限的今天,这样会增⼤⽹络传输的流量,⽽且也没必要。⽽ UTF-8 采⽤了⼀种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。
UTF-8 有以下编码规则:
如果⼀个字节,最⾼位(第 8 位)为 0,表⽰这是⼀个 ASCII 字符(00 - 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。
如果⼀个字节,以 11 开头,连续的 1 的个数暗⽰这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的⾸字节。
如果⼀个字节,以 10 开始,表⽰它不是⾸字节,需要向前查才能得到当前字符的⾸字节
UTF-16 虽然编码效率很⾼,但是对单字节范围内字符也放⼤了⼀倍,这⽆形也浪费了存储空间,另外 UTF-16 采⽤顺序编码,不能对单个字符的编码值进⾏校验,如果中间的⼀个字符码值损坏,后⾯的所有码值都将受影响。⽽ UTF-8 这些问题都不存在,UTF-8 对单字节范围内字符仍然⽤⼀个字节表⽰,对汉字采⽤三个字节表⽰。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。