字符编码集

来源:互联网 发布:有哪些漫画软件 编辑:程序博客网 时间:2024/05/14 16:09

计算机中,数据存储是以二进制来存储的(bit),而人们所理解的常见的字符数据等都需要进行编码为二进制,因此边有了字符编码,不同字符编码集合便构成了字符集。Java编程过程中,常见的字符集主要有:ASCII编码、ISO8859、GBK和Unicode编码。

  • ASCII编码

ASCII(美国信息互换标准代码)编码用一个字节(1byte=8bit)来表示字符,是现今最通用的单字节编码方式,基于常用的英文字符的一套编码系统。每一个ASCII与一个8bit的二进制相对应,其最高位为0,对应的二进制数范围为0-127,表示英文字符、数字和控制字符。另外的128个(最高位为1的)扩展ASCII编码,表示一些图形和划线符号。
现如今,不同国家都将自己的语言引入到计算机中,因此给予ASCII编码的字符集已经不能满足要求了,便有了后面一些字符编码集。
  • ISO8859
国际标准组织ISO为了解决ASCII字符集表示字符数量的限制,便指定了几种不同的字符集,比较常见的ISO8859-1,通常也叫做Latin-1,ISO8859-1包括了西方欧洲语言书写不可缺少的附加字符,其中0-127的字符和ASCII一样。除此之外,ISO还定义了10个适用于不同语言的字符集(ISO8859-2到ISO8859-10和ISO8859-15),ISO8859-11到ISO8859-14四个字符集正在开发。这些字符集共享0-127的ASCII字符,扩展了128-255的其他字符。
  • GBK
常见的GB2312是中国国家标准汉字信息交换用编码,标准号为GB2312-80,简称国标码。它采用两个字节(2byte)来表示汉字字符,分别成为高位和低位,是所有中文系统和国际化软件都支持的汉字字符编码集,它的编码范围为:高位(0xa1-0xfe),低位(0xa1-0xfe),汉字是从0xb0a1开始,在0xf7fe。
为了对中文繁体、不常用的字和一些其他的符号扩展,1995年颁布了GBK编码规范,GBK完全兼容GB2312,包含20902个汉字,其编码范围为:0x8140-0xfefe。GBK是现阶段windows和其他一些中文操作系统的默认字符集,但不是所有的国际化软件都支持GBK规范。
  • Unicode编码
现有问题:中国网友发送一份中国邮件给西班牙朋友,中国网友邮件的中文字符通过GBK编码变为二进制数据发送到西班牙,西班牙朋友通过ISO8859-1将二进制数据解码为字符,便出现了乱码。因此为了统一全世界的编码,Unicode协会发布了Unicode编码。
Unicode编码使用0-65536(2byte)的双字节无符号数对每一个字符进行编码,目前已经定义了40000多个不同的Unicode字符,剩余的25000多个用来扩展,其中大约20000多个用来扩展汉字,Unicode中0-255数字和ISO8859-1中定义的一致,为了实现等长,是在前面加0。中文字符在Unicode中的范围为:0x0800-0xffff
  • UTF-8
Unicode编码编码字符时,一个英文字符要占用2byte,在Internet上传输,会使数据量加倍,为了减少传输量和存储量,采用UTF-8编码来解决。如果Unicode编码范围为0x0000和0x0080-0x007f的字符在UTF-8中是占用两个字节,
如果Unicode编码范围在0x0800-0xffff(汉字)之间,对应的UTF-8占用三个字节。UTF-8在编码汉字的时候比Unicode多占用一个字节。
Unicode和UTF-8之间的转换规则如下:
1.如果Unicode编码的前面9位为0,则UTF-8占用一个字节,这个字节的首位是0,后七位和Unicode后七位相同。
2.如果Unicode编码的前5位为0,则UTF-8占用两个字节,这两个字节,首字节以“110”开头,后面5位为原二进制数据去掉前五位后的最高5位相同,第二个字节以“10”开头,后六位为原二进制数据的后六位。
3.如果不符合上述两条规则,UTF-8占用三个字节,第一个字节以“1110”开头,后四位为原二进制数据个高四位;第二个字节以“10”开头,后六位为原二进制数据接下来的6位,第三个字节以“10”开头,后六位为原二进制数据的低六位。

原创粉丝点击