欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算机常见的编码规范

程序员文章站 2024-03-12 16:16:56
...

有关编码的基础知识:

1.位 bit————>最小的单元

字节 byte————>机器语言的单位

1byte=8bits

1KB=1024byte

1MB=1024KB

1GB=1024MB

1TB=1024GB

2. 二进制 binary

八进制 octal

十进制 decimal

十六进制 hex

字符:是各种文字和符号的总称,包括各个国家的文字,标点符号,图形符号,数字等。
字符集:字符集是多个符号的集合,每个字符集包含的字符个数不同。
字符编码:字符集只是规定了有哪些字符,而最终决定采用哪些字符,每一 个字符用多少字节表示等问题,则是由编码来决定的。计算机要 准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。

常见字符集的编码介绍:

ASCII码:

  • 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出2^8=256种状态,这被称为一个字节(byte)。

也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从000 0000到1111 1111。

  • 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

主要显示英语和一些西欧语言,是现今最通用的单字节编码系统

  • ASCII码一共规定了128个字符的编码

包含内容:控制字符(回车键,退格,换行键等) 可显示字符(英文大小写,阿拉伯数字,西文符号) 扩展字符集(表格符号,计算符号,希腊字母,拉丁符号)。

  • 编码方式: 第 0-31 号及 127 号是控制字符或通讯专用字符; 第 32-126 号是字符,其中 48-57 号为 0-9 十个阿拉伯数字,65-90 号为 26 个 大写英文字母,97-122 号为 26 个英文小写字母,其余为一些标点符号,运算符号等。

比如空格“SPACE”是32(二进制0010 0000)、大写的字母A是65(二进制0100 0001);

  • 这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

  • 在计算机存储单元中,一个 ASCII 码值占一个字节(8 个二进制位),最高位是用作奇偶检验位

奇偶校验

奇校验(odd parity):让传输的数据(包含校验位)中1的个数为奇数。即:如果传输字节中1的个数是偶数,则校验位为“1”,奇数相反。以发送字符:1010 1010为例:
计算机常见的编码规范
偶校验(even parity):让传输的数据(包含校验位)中1的个数为偶数。即:如果传输字节中1的个数是偶数,则校验位为“0”,奇数相反。还是以发送字符:1010 1010为例:
计算机常见的编码规范

ANSI编码:

  • ANSI编码是一种对ASCII码的拓展:ANSI编码用0x00–0x7f (即十进制下的0到127)范围的1 个字节来表示 1 个英文字符,超出一个字节的 0x80~0xFFFF 范围来表示其他语言的其他字符。

  • 也就是说,ANSI码仅在前128(0-127)个与ASCII码相同,之后的字符全是某个国家语言的所有字符。

  • 为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个字节来表示 1 个字符。比如:汉字 ‘中’ 在ANSI编码的中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。

  • 不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。

  • 这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码

  • 在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。

  • 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

  • ANSI编码表示英文字符时用一个字节,表示中文用两个或四个字节。

非ASCII编码:

  • 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。

比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制1000 0010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。

但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。

至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256×256=65536个符号。

Unicode编码:

  • 世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

  • 可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,它是一种所有符号的编码

  • Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样。

Unicode的问题:

需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储

  • 这里就有两个严重的问题:

  • 第一个问题是,如何才能区别Unicode和ASCII?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?

  • 第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

  • 它们造成的结果是:

  • 出现了Unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示Unicode。

  • Unicode在很长一段时间内无法推广,直到互联网的出现。

  • Unicode 允许在同一服务器上混合使用不同语言,它为每种语言的每个字符设定了统一并且唯一的二进制编码,以满足跨平台,跨语言进行文本转换,处理的要求。

UTF-8:

  • 互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。这里的关系是,UTF-8是Unicode的实现方式之一

  • UTF-8最大的一个特点,就是它是一种变长的编码方式,可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则:

  • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
  • 对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

GB2312 字符集:

  • 定义: 信息交换用汉字编码字符集。是中国标准的简体中文字符集,它所收录的汉 字已经覆盖 99.75%的使用频率,在*和新加坡广泛使用。
  • 包含内容: GB2312 收录了简化汉字及一般字符,序号,数字,拉丁字母,日文假名, 希腊字母,俄文字母,汉语拼音符号,汉语注音字母,共 7445 个图形字符。 其中包括 6763 个汉字,一级汉字 3755 个,二级汉字 3008 个。

GBK 字符集:

  • 定义: GBK 是 GB2312 字符集的扩展,它收录了 21886 个符号,分为汉字区和图形符号区, 汉字区包括 21003 个字符。GBK 字符集主要扩展了繁体中文字的支持

BIG5 字符集:

  • 定义: 又称大五码,由*五家软件公司创立。因为当时*没有一个标准的字符集,而且 GB2312 又没有收录繁体字,所以才推出了 BIG5。
  • 包含内容: BIG5 字符集共收录了 13053 个中文字,该字符集在*使用。但是没有考虑到社会上流通的人名,地方用字,方言用字,化学及生物科等用字,没有包含日文平假名及片假字母。

GB18030 字符集:

  • 定义: GB18030 字符集标准解决汉字,日文假名,朝鲜语和中国少数民族文字组成 的大字符集计算机编码问题。
  • 包含内容: 该标准的字符总编码空间超过 150 万个编码位,收录了 27484 个汉字,覆盖中文,日文,朝鲜语和中国少数民族文字。满足*,香港,*,日 本和韩国等东南亚地区信息交换多文种,大字量,多用途,统一编码格式的 要求。

总结:

  • 从 ASCII,GB2312,GBK 到 GB18030,这些编码方法是向下兼容的,即同一 个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一的处理。区分中文编码的方法是高字节的最高位不为 0。

  • 计算机使用的缺省编码方式就是计算机的内码。有的中文 windows 的缺省内码还是 GBK,可以通过 GB18030 升级包升级到 GB1030。不过相对 GBK 新增的字 符,普通人很难用到的,通常我们用 GBK 来指代中文 windows 内码。

相关标签: JavaSE面试题整理