Ø 那么现在开始康康都有哪些编码方式

 1.  ASCII 

  ASCII ---American Standard Code for Information Interchange,美国信息交换标准代码,

  最新发表于1967年,共128个字符,7位二进制表示,详细的对应见百度百科,比较简单,此处不赘述。

2.  Unicode

  Unicode又被称为万国码,是计算机领域的一项业界标准,包括字符集,编码方案等等。它为每种语言的每个字符设定了统一且唯一的二进制编码,满足跨语言跨平台的文本转换和处理的要求。1990年研发,94年正式公布。

  • Unicode可以理解为一个字符库,理论上包含所有可能出现的字符,两个字节表示一个字符,每个字符都有一个编号,该编号也称为码位;
  • Unicode将这个库分为17个平面,从00-10 (十六进制,0x10=17),每个平面有 65536 个码位,共1114112个字符。这些平面中,第一个Unicode平面,被称为基本多语言平面,Basic Multilingual Plane,缩写BMP,其他平面称为辅助平面Supplementary Planes。
  •  Unicode的编码方案

  重点来了!

  Unicode 只是一个庞大的字符库,将字符进行了编号,在被调用前,还经过了不同的编码处理。

  1)  UCS

  Unicersal Character Set ,通用字符集,根据 ISO 10646 标准定义。又被分为UCS-2,UCS-4,且均采用BOM机制,Bytes Order Mark 机制(确定字节流的大小端序,确定字节流的Unicode编码方案)。

  UCS-2:固定使用2个字节编码,对用第一个Unicode plane。

  UCS-4 :固定使用4个字节编码。

  2)  UTF

  Unicode Transformation Format ,Unicode转换格式的意思

  a) UTF-8

  UTF-8 是一种变长编码方式,为什么是可变的呢,因为一个Unicode字符最大时需要3个字节表示,但有些字符,像简单的英文,只需要一个字节,在网络传输时,可以节省资源.

  对于一个字符,如果一个字节可以表示,那么其最高位二进制为0;多字节,那么第一个字节的最高位起,“1”的个数就是编码后的字节数,其余字节均已10开头。(这没有为什么,就是规定而已,最开始看的帖子没有说明这点,本人就比划了一个下午,搞自闭了,希望大家别踩坑了)

  具体表现方式:

  1字节 0xxxxxxx

  2字节 110xxxxx 10xxxxxx

  3字节 1110xxxx 10xxxxxx 10xxxxxx

  4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 

  5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 

  6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

  可以看到,可用来标识编码的实际位数最多31位,即除去这些1和10控制位外,x的位数,这个编码与Unicode的编码是对应的。Unicode与UTF-8在转换时,先除去高位0,再根据所剩编码的位数,决定所需的最小的UTF-8编码位数。

  具体对应关系如下

十进制

Unicode符号范围(16进制)

UTF-8编码(二进制)

0~127

0000 0000~0000 007F

0xxx xxxx

128~2047

0000 0080~0000 07FF

110x xxxx 10xx xxxx

2048~65536

0000 0800~0000 FFFF

1110 xxxx 10xx xxxx 10xx xxxx

65536~114111

0001 0000~0010 FFFF

1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx

  理解例子:
    如字符‘A’,他的Unicode码位是65,二进制为0100 0001,用UTF-8一个字节即可表示,也是0100 0001,这很直接的说明UTF-8是向下兼容ASCII的。

  再例如这个‘老’字,在Unicode中的码位是63796,对应的Unicode编码为F934,把它转化为二进制是1111 1001 0011 0100,转化为UTF-8编码需要三个字节表示,从低位到高位填入,1110 1111 1010 0100 1011 0100,转换为十六进制就是EFA4B4。

  b) UTF-16

  UTF-16使用2或4个字节编码。若码位在BMP第一平面,使用2个字节,2^16=65536,恰好可以完全表示BMP;BMP外的辅助平面,使用4个字节编码。

  具体编码方式:这4个字节,即16 Bit,被称为代理对。第一部分为高位代理,或前导代理,字节范围(D800~DBFF);第二部为低位代理或后尾代理,字节范围(DC00 ~DFFF)(这部分码位在BMP中是保留的)。

辅助平面码位表示具体规则

  a) Unicode码位转化为16进制,减去0x1 0000 ,将结果扩展20位,高位不足补零。在上面我们有提到,Unicode的范围最大为0x10 FFFF,所以最大差是0x0F FFFF;

  b) 将差按照高低各十位分割;

  c) 高十位扩展至2个字节,再加上0xD800;低十位同样扩展至2个字节,加上0xDC00。

       理解例子:

字符‘A’在BMP范围中,Unicode码位是65,十六进制为0x0041。在传输时,这里会有一个码序问题,是0x4100(小)还是0x0041(大),这个同样依据BOM机制,加入控制信号,大端序时在数据前加上FE FF,小段序则加上FF FE。

字符 在辅助平面内,Unicode码位是66368,其十六进制为0x1 0340。先将0x1 0340-0x1 0000,得到0x0 0340,扩展到20位,且分割高低十位:0000 0000 00|11 0100 0000,高位加上D800;低位加上DC00;得到结果D800 DF40。

  3. ISO-8859

ISO-8859是一系列编码,由8位二进制表示,共256个字符,前128个字符与ASCII码是相同的,后128个字符,每个国家都是不一样的;参考百度百科对应关系。这里简单提一下ISO-8859-1,它是ISO-8859家族中的一位成员,又叫Latin-1,8位为一个字节,很多协议中,默认使用的是该编码;缺点是256个字符还是不够用,常和其他编码方式配合出现。

  

  4.GB2312

GB2312 -1980 是中国国家标准总局1980年发布的《信息交换用汉子编码字符集》的标号。

共收录汉字6763个和非汉字图形字符682个,共7445个;

整个字符集分为94个区,每区94位,共8836个;

每位1个字符,区和位组合对汉字编码,称为区位码

二进制表示字符:将区位码换算为16进制,再加上2020H,就是我们的国标码;国标码加上8080H,就是计算机机内码。

  

  5.GBK

GBK ,”国标扩展”的字母首拼,全称为《汉字内码扩展规范》,制定于1995年12月1日;

GBK向下兼容GB 2312编码,在其基础上,使用双字节编码方案,范围为8140~FEFE(十六进制) (剔除xx7F),共23940个码位,其中21003个汉字。支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年10月制定, 1995年12月正式发布,目前中文版的WIN95、WIN98、WINDOWS NT以及WINDOWS 2000、WINDOWS XP、WIN 7等都支持GBK编码方案。

参考链接:

  官网对照Unicode字符编码表地址:https://unicode-table.com/cn

  转化查询参考地址:https://www.qqxiuzi.cn/bianma/zifuji.php

    https://www.qqxiuzi.cn/bianma/Unicode-UTF.php

  https://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html

  https://www.cnblogs.com/leesf456/p/5317574.html

最新文章

  1. word2013删除下载的模板
  2. POJ3764 The xor-longest Path
  3. gulp进阶构建项目由浅入深
  4. Codeforces Round #227 (Div. 2) E. George and Cards set内二分+树状数组
  5. 【jQuery】: 定时刷新页面
  6. 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)
  7. blur事件
  8. 【Beta】 第六次Daily Scrum Meeting
  9. DataBase MongoDB基础知识记录
  10. Spring Cloud 2-Bus 消息总线(九)
  11. Ruby学习笔记之升级ruby的版本
  12. Redis主从同步原理-PSYNC【转】
  13. 获取checkbox勾选的id
  14. java常见3种文件上传速度对比和文件上传方法详细代码
  15. linux下查询java进程以及杀掉其进程
  16. SQL Server CTE 递归查询全解 -- 转 学习
  17. 2017-2018-2 165X 『Java程序设计』课程 助教总结
  18. [译]Intel App Framework 3.0的变化
  19. Log4net用法(.config文件)
  20. PAT 1062 最简分数(20)(代码+思路)

热门文章

  1. 面试刷题24:介绍一枚 JAVA妹妹?
  2. [leetcode] 位操作题解-2
  3. iOS OCR
  4. Windows程序卡顿、无响应问题定位
  5. ASP.NET Core技术研究-探秘Host主机启动过程
  6. C - 啥~ 渣渣也想找玩数字 HDU - 2141(有序序列枚举 + 二分优化查找)
  7. Oracle给权限和同义词
  8. 吐槽,Java 设计的槽点
  9. CCF2018 12 2题,小明终于到家了
  10. pycharm文件名颜色代表的含义