zoukankan      html  css  js  c++  java
  • ASCII编码、GBK编码,Unicode编码和UTF-8。

    ASCII编码与GBK编码

    摘自百度

    ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
    GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年12月15日正式发布,这一版的GBK规范为1.0版。

    一般情况下,我们见到的英文和数字是单字节的,以ASCII编码,也就是说现代的GBK编码是兼容ASCII编码的。比如一个数字2,对应的二进制是0x32,而不是 0xA3 0xB2。那么问题来了,0xA3 0xB2 又对应到什么呢?还是2(笑)。注意看了,这里的2跟2是不是有点不太一样?!确实是不一样的。这里的双字节2是全角的二,ASCII的2是半角的二,一般输入法里的切换全角半角就是这里不同。


    一个中文字符占用2字节,使用GBK编码的半角英文,数字和ASCII是一样的。

    GBK编码和Unicode编码

    GBK是中国标准,只在中国使用,并没有表示大多数其它国家的编码;而各国又陆续推出各自的编码标准,互不兼容,非常不利于全球化发展。于是后来国际组织发行了一个全球统一编码表,把全球各国文字都统一在一个编码标准里,名为Unicode。

    Unicode编码和UTF8编码

    Unicode 是「字符集」 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
    UTF-8 是「编码规则」 将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)
    广义的Unicode是一个标准,包含字符集和一系列的编码规则,即Unicode字符集和UTF-8,UTF-16,UTF-32......

    utf8是对unicode字符集进行编码的一种编码方式。
    一下摘自知乎uuspider的回答,

    举一个例子:It's 知乎日报

    你看到的unicode字符集是这样的编码表:

    I 0049
    t 0074
    ' 0027
    s 0073
    知 77e5
    乎 4e4e
    日 65e5
    报 62a5
    

    每一个字符对应一个十六进制数字。

    计算机只懂二进制,因此,严格按照unicode的方式(UCS-2),应该这样存储:

    I 00000000 01001001
    t 00000000 01110100
    ' 00000000 00100111
    s 00000000 01110011
      00000000 00100000
    知 01110111 11100101
    乎 01001110 01001110
    日 01100101 11100101
    报 01100010 10100101
    

    这个字符串总共占用了18个字节,但是对比中英文的二进制码,可以发现,英文前9位都是0!浪费啊,浪费硬盘,浪费流量。怎么办?

    UTF。

    UTF-8是这样做的:
    1.单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;
    2.n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。
    这样就形成了如下的UTF-8标记位:
    0xxxxxxx
    110xxxxx 10xxxxxx
    1110xxxx 10xxxxxx 10xxxxxx
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx...
    ...
    于是,”It's 知乎日报“就变成了:

    I 01001001
    t 01110100
    ' 00100111
    s 01110011
    知 11100111 10011111 10100101
    乎 11100100 10111001 10001110
    日 11100110 10010111 10100101
    报 11100110 10001010 10100101
    

    和上边的方案对比一下,英文短了,每个中文字符却多用了一个字节。但是整个字符串只用了17个字节,比上边的18个短了一点点。

    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    原生ajax四部曲
    jquery ajax参数
    java String format占位符
    servlet是什么
    直接插入排序算法
    通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的--20135334赵阳林
    信息安全系统设计基础第一周学习总结
    信息安全系统设计基础实验五:通讯协议设计
    信息安全系统设计第二次&第四次实验
    信息安全系统设计基础第一次实验报告
  • 原文地址:https://www.cnblogs.com/Rainingday/p/14641104.html
Copyright © 2011-2022 走看看