ascii gbk utf-8 编码问题

来源:互联网 发布:软件系统安全 编辑:程序博客网 时间:2024/06/07 06:28

  首先我们需要明白计算机底层中所有东西只能由010101二进制表现出来的,那么我们如何用01二进制来表现我们生活中字母数字呢?聪明的远古人类想到将01二进制数字和我们生活中的文字关联起来,形成一一对应。这样我们在计算机内部实际存储的是数字,而我们看到的则是经过渲染的文字。

一、ASCII

  由于美国日常使用中只有字母和数字,还有一些控制字符。一个字节8位,8位可以表示256种字符。因此用一个字节就可以很好满足美国使用要求。  

Bin(二进制)    Oct(八进制)     Dec(十进制)  Hex(十六进制)  缩写/字符     解释00000000     0       0      00    NUL(null)    空字符00000001     1       1      01 SOH(start of headline) 标题开始00000010     2       2      02  STX (start of text)  正文开始00110000     60      48      30      0      数字000110001     61      49      31      1      数字100110010     62      50      32      2      数字201000001     101     65      41      A    大写字母A 01000010     102     66      42      B    大写字母B01000011     103     67      43      C    大写字母C

根据上面的表格就能很好的将文字与二进制码对应起来,方便计算机存储。

二、gb2312和GBK

  现在美国文字可以很好表达,但是其他国家就不同意了,每个国家都有不同的文字。而我中国同样有着博大精深汉字。为了满足汉字需求,gb2312应运而生。
  由于一个字节已经无法满足数量的要求了。所以采用两个字节来表示汉字。第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。区位码=区字节+位字节。例如“啊”字在大多数程序中,会以两个字节,0xB0(第一个字节) 0xA1(第二个字节)储存。
  虽然基本上gb2312已经能够覆盖99%的汉字,但是gb2312无法处理一些特殊文字,比如古文字。进一步有了GBK编码被设计出来。几乎涵盖了所有汉字。
  需注意gb2312和GBK都是兼容ascii编码的。也就是说gbk包含了ascii中的字符映射。
  中文还有个GB18030能够容纳更多文字。

三、Unicode

  每个国家都可以自己制定一套编码自己使用,比如我们中国使用gbk,但是你怎么和别人交流呢?别人可不管你使用的是gbk。这时候就需要一个统一组织将所有的文字都能够编码,要让所有国家都能认可。
  Unicode又称统一码、万国码。在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。Unicode为了包含所有文字,使用更多位的字节的表示。但是对于有些文字使用多字节是比较浪费的,比如数字1,在ascii编码中明明能够使用一个字节就能够表示,在Unicode中有可能就是多字节表示。大大浪费的存储。

四、utf-8

  utf-8是Unicode的一种实现方式。实际情况使用变字节的来表示文字。使用1~4个字节表示一个字符,根据不同的字符而变化字节长度,当字符在ASCII 码的范围时,就用一个字节表示,而一个中文字符占3个字节。
 

0 0
原创粉丝点击