常用字符编码

原创 2007年09月27日 18:37:00

常用字符编码      Write by Jack.Hao

我们看到的一切数据在计算机中都是以二进制的形势存在的,为什么却可以看到不同的字符呢?这就是字符编码的作用了。在早期计算机主要应用中所用到的字符很少,仅为26个英文字母和一些特殊的符号,要对这些字符进行相应的编码,我们只需要一个字节(8位二制数据,可能表示256个字符)而这以足够应符当时的需求。然而我们表示的时候只用到了后7位,首位为零,这样可以表示128个字符,这就是我们常听的ASCII码了。

各种字符编码的集合就字符集!

 

<!--=========================== Write by Jack.Hao=========================-->

 

下面介绍几种常见的字符编码:

 

1.ASCII码:

  ASCII(American Standard Code for Information Interchange,美国国家信息交换编码)码,主要应用于英文字符的编码。每一个ASCII码占8位(一个字节),最高位为0,这些字符在0~127之间,最多可表示128个字符。另位128个作为扩展,最高位为1时,表示的一些特殊的符号(图形符)。

 

  但随着计算机的发展,被各地所使用,而ASCII码缺少对各地字符编码的支持,这已不能满足人们的需求,为些各地ASCII码进行扩展或重新编码,从而产生了各种不同字符集,但它们都对ASCII中的字符提供了支持。

 

2.ISO8859-1

  ISO8859-1(又称Latin-1)编码,它是在ASCII码的基础扩展而形成的,又加上了对西欧字符的支持。其中0~127所表示的字符与ASCII码相同,只是又包含了128~255包含了西欧所用的一些字符。

 

3.GB2312GBK

这个编码大家应该不陌生吧~~

GB2312是中国人民共和国国家标准汉字交换编码,由我国国家标准总局制定发布,适用于中国大陆和新加坡地区。为了和ASCII码区分,GB2312用两个字节表示,每个字节的最高位都为1

GB2312中一共包括了6762个汉字,算上其它一些控制键和其它字符,一共7573个。GB2312将代码表分为94个区,对应第一字节。每个区94个位,对应第二字节。01-09区为符号、数字区,16-87区为汉字区,10-15区、88-94为等待扩展空白区。
     GB2312
将收录的汉字分成两级:第一级是常用汉字计3755个,位于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,位于56-87区,按部首/笔画顺序排列。
GB2312
的编码范围为2121H-777EH,与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。
    
为了对更多的字符提供支持,在199512月,我国又颁布了GBK(国标2312的扩展版)。,在这套字符编码中,除了全部兼容GB2312中的所有字符以外,还对繁体中文和许多特殊符号进行了编码。它是现在windows中文系统默认的字符集。其中共包含了20902个汉字,其编码范围0x8140-oxfefe

在中国大陆使用的计算机系统上,默认将GBKGB2312作为该系统的本地字符集。

 

 

<!--======================== Write by Jack.Hao=======================-->

 

每个地区都定义了自己的一套编码,平时还不会出什么问题,但一旦涉及到国际化,就会出现乱码问题。

例:你用GB2312写的文件拿到美国的电脑上还想看一下,就会看到乱码,因为美国人使用的编码中并没有包含你所写的这些字符。

为了解决国际化的问题,就特别需要一种全球统一的字符编码。

 

 

4.Unicode

  Unicode(统一字符编码集),由ISO(国际标准化组织)将全世界的编码进行了统一编码。它使用两个字节表示。0~65535,共可表示65536个字符。其中包括了中文,西欧字符,日语,韩语,阿拉伯语,希腊语等等,包括了世界上决大多数和的字符。其中定义了40000多个字符,其它25000多个字符作为以后的扩展。定义的字符中包括20000多个汉字,11000多个韩语字符,还有其它字符。

Unicode0~255的字符与ISO8859-1一致。

 

这样就可以很好解决国际化中的乱码问题,只要用Unicode编写的文档然后拿到以地方再用Unicode码都可以正常的显示,而不再是乱码。

 

这样好是好,但也有一个问题,大家想想,用两个字符去表示一个英文字符,是不是有点浪费存储空间啊,因为一个足矣~~~

 

5.UTF-8

  既然Unicode这些浪费,大家就又在寻求一种新的字符编码来替代Unicode,这时UTF-8出场了!!

  UFT-8Eight-bit UCS Transformation Fomrat,它是UCSUniversal Character Set,通用字符集)的一个字集。

  它分三种情况:

    ASCII码保持原样,只占用一个字节。如果字符在0x0080~0x007f之间,它使用两个字节来表示,如果字符在0x0800~0xffff之间它采用三个字节来进行表示。例:如果为中文字符它会采用三个字符来表示。

 

既然它们同为国际化的编码,之间就可以进行转换,转换规则如下:

(1)如果Unicode的前9位是0,UTF-8用一个字节表示。UTF-8Unicode码最后7位二进制数据,最高位补零。

例:Unicode/u0035=00000000 00110101

   UTF-8:00110101=0x35H

(2)如果Unicode5位为零,则UTF-8采用两个字节表示。UTF-8的第一个字节前的前三位为固定的110开头,第一个字节的后5位为Unicode编码去掉前5位后的最高5位。第二个字节前二位固定以10开头,第二个字节的后六位取Unicode码的最低6位。

(3)如果前两个都不行,那就只能转换为三个字节了。第一个字节以1110开头,第一个字节的后四位取Unicode码的最高四位。第二个字节以10开头,第二个这节的后六位为Unicode码的5-10位。第三个字节也以10开头,第三个字节的后六位取Unicode的最后六位。

 

注意(1),(2),(3)顺序的含义,能转换为一个字节它当然不会转换为二个字节。

 

<!--====================== Write by Jack.Hao===========================-->

 

本文只是初略的介绍了几个常用的几种字符编码,常见的还有UTF-16,它是在Unicode编码的基础之上扩展形成的一种新的字符编码。UTF-16编码扩充并没有影响Unicode编码,一个用Unicode编码的字符就是UTF-16格式。如果大家想详解了解各种编码的底层,可以在网上搜索一下,很多的吗~~~

 

注意:国际化的编码,如UTF-8UnicodeUTF-16,虽然在国际化时方便很好,但它也不会完全替代 本地编码。如Unicode表示一个英文字符也要2个字节,这样美国人会乐意的。UTF-8表示一个汉字却要三个字节,同样我们也不乐意。

所以说在相当长的一段时间内国际化编码和本地编码将长期共存!

 

参考书籍:Java Web开发详解 孙鑫

转载请说明出处。。。。。。

 

字符常见的几种编码方式

无论在是在编辑文本文件的时候,还是在制作网页的时候,总会遇到文本编码方式的问题。如果处理不当,就会出现乱码的问题。因此,有必要对文本的编码方式做一个详尽的了解。 常见的一些字符编码方式无非有:Unic...
  • csywwx2008
  • csywwx2008
  • 2013年12月05日 11:19
  • 41320

计算机基本概念之字符编码,字符集

本博文主要介绍计算机基本存储单位单位、字符编码及字符集。
  • Big2008Bone
  • Big2008Bone
  • 2016年01月08日 15:09
  • 702

常见的几种字符集

常见的字符集有ISO-8859-1,GB2312,GBK,UTF-8,UTF-16 首先我们来看下ISO-8859-1编码 字符串"I am 君山" 用ISO-8859-1编码,编码结果如图所示   ...
  • u010627840
  • u010627840
  • 2015年12月27日 10:02
  • 4114

常见字符编码介绍以及相互转换

最近在用JS时,涉及到了不同编码之间的转换.于是汇总了一些网上的资料,整合成了自己的文档. -备忘录 知识点涉及: 字符编码基础,不同编码之间的转换,如UTF-8转UTF-16,如UTF-16转GB...
  • u010979495
  • u010979495
  • 2016年01月28日 16:52
  • 4072

每个程序员的都应该了解的字符编码

作者:科言君 链接:https://www.zhihu.com/question/20152853/answer/95576659 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 在开发过程...
  • zxh2075
  • zxh2075
  • 2016年11月08日 18:01
  • 823

字符编码大全

* 刚开始很多人对于字符集都有莫名的恐惧,究其原因还是对于各种字符集没有清楚的去了解过,当你把每种常用的字符集的来源和基本规则了解清楚之后,会发现字符集一点都不神秘,而且想理解明白也没有太深的东西需要...
  • ming1205
  • ming1205
  • 2015年08月20日 14:59
  • 732

常用字符编码

我们看到的一切数据在计算机中都是以二进制的形势存在的,为什么却可以看到不同的字符呢?这就是字符编码的作用了。在早期计算机主要应用中所用到的字符很少,仅为26个英文字母和一些特殊的符号,要对这些字符进行...
  • ITMagic_Jack
  • ITMagic_Jack
  • 2011年02月21日 00:32
  • 899

日语的文字编码

1、常用编码日语的文字编码主要是Shift_JIS、EUC-JP、ISO-2022-JP这三种。(1)Shift_JIS主要是Windows和Macintosh使用的文字编码。Shift_JIS的文字...
  • jackyren007
  • jackyren007
  • 2008年07月31日 10:24
  • 5336

常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、UTF-8、unicode

ASCII ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。 只支持AS...
  • zhoubl668
  • zhoubl668
  • 2011年10月28日 13:06
  • 8532

MFC常用字符编码转换

MFC中几种字符串
  • dalong277
  • dalong277
  • 2017年11月20日 00:57
  • 46
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:常用字符编码
举报原因:
原因补充:

(最多只允许输入30个字)