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

 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

编码理解的漫漫长路(Unicode、GBK、ISO)的更多相关文章

  1. 字符编码-UNICODE,GBK,UTF-8区别【转转】

    字符编码介绍及不同编码区别 今天看到这篇关于字符编码的文章,抑制不住喜悦(总结的好详细)所以转到这里来.转自:祥龙之子http://www.cnblogs.com/cy163/archive/2007 ...

  2. 【JAVA编码专题】UNICODE,GBK,UTF-8区别

    简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与g ...

  3. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  4. unicode,gbk,utfF-8字符编码方式的区别

    一.编码历史与区别 一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们. ...

  5. 字符编码ANSI、ASCII、GB2312、GBK、GB18030、UNICODE、UTF-8小结

    编码和解码可以理解成二进制和字符(广义的字符,包括汉字等)的映射表,编码即从字符映射至二进制,解码则为逆过程. 1.英语字符编码ASCII 开始计算机只在美国用.8字节一共可以组合出256(2的8次方 ...

  6. Unicode gbk gb2312 编码问题 [转载]

    原文地址: http://www.cnblogs.com/csn0721/archive/2013/01/24/2875613.html HTML5 UTF-8 中文乱码   <!DOCTYPE ...

  7. 【JAVA编码专题】UNICODE,GBK,UTF-8区别 分类: B1_JAVA 2015-02-10 21:07 153人阅读 评论(0) 收藏

    简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与g ...

  8. JAVA字符编码一:Unicode,GBK,GB2312,UTF-8概念基础

    第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础 来源:holen'blog   对字符编码与Unicode,ISO 10646,UCS,UTF8,UTF16, ...

  9. 编码的来源于格式简介ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE

    编码一直是让新手头疼的问题,特别是 GBK.GB2312.UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚.但是编码又是那么重要,特别在网页这一块.如果你打出来 ...

随机推荐

  1. Hive设置配置参数的方法,列举8个常用配置

    Hive设置配置参数的方法 Hive提供三种可以改变环境变量的方法,分别是: (1).修改${HIVE_HOME}/conf/hive-site.xml配置文件: (2).命令行参数: (3).在已经 ...

  2. [CS充实之路] CS50 WEEK 1

    前言 大学电子专业,幸好自学了JAVA,遂有幸工作了三年,但这期间一直在焦虑,一个是基础不扎实的担心,另一个是未来方向的不确定.去年开始终于下定决心,一方面走一遍CS之路,巩固知识体系,另一方面部署自 ...

  3. TensorFlow 多 GPU 处理并行数据

    Multi-GPU processing with data parallelism If you write your software in a language like C++ for a s ...

  4. 一文看懂NLP神经网络发展历史中最重要的8个里程碑!

    导读:这篇文章中作者尝试将 15 年的自然语言处理技术发展史浓缩为 8 个高度相关的里程碑事件,不过它有些偏向于选择与当前比较流行的神经网络技术相关的方向.我们需要关注的是,本文中介绍的许多神经网络模 ...

  5. spring源码阅读笔记06:bean加载之准备创建bean

    上文中我们学习了bean加载的整个过程,我们知道从spring容器中获取单例bean时会先从缓存尝试获取,如果缓存中不存在已经加载的单例bean就需要从头开始bean的创建,而bean的创建过程是非常 ...

  6. Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 基础篇

    本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结. 总共分三个部分: 基础篇主要争对C#初学者,巩固C#常用知识点: 中级篇主要争对WPF布局与美化, ...

  7. iOS 项目优化

    前言 iOS性能优化系列篇之"优化总体原则" 不要提前过度优化 要找到性能瓶颈 要在不同性能指标间权衡 要理解优化任务的底层运行机制 要有技术保障体系 一.启动速度优化 1.1 学 ...

  8. JavaScript 异步、栈、事件循环、任务队列

    概览 我们经常会听到引擎和runtime,它们的区别是什么呢? 引擎:解释并编译代码,让它变成能交给机器运行的代码(runnable commands). runtime:就是运行环境,它提供一些对外 ...

  9. 「SpringBoot」如何优雅地管理SpringBoot项目

    本文主要讲述一下如何优雅地管理SpringBoot项目. 背景 课堂上,当小明形如流水地回答完沐芳老师提出来的问题时,却被至今没有对象的胖虎无情嘲讽了? 沐芳老师:小明,你平时是如何启动.停止你的Sp ...

  10. Ubuntu16.04下LAMP环境的安装与配置

    Ubuntu16.04下LAMP环境的安装与配置 最近做个实验需要用到Ubuntu环境的靶场,所以这里介绍下Ubuntu环境下LAMP的安装与配置,话不多说,我们gkd! 1.Apache2的安装 首 ...