ascii gbk utf-8 编码问题

  首先我们需要明白计算机底层中所有东西只能由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      数字0
00110001     61      49      31      1      数字1
00110010     62      50      32      2      数字2
01000001     101     65      41      A    大写字母A 
01000010     102     66      42      B    大写字母B
01000011     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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值