GBK字库  ISO 10646  Unicode  
GBK字库  ISO 10646  GBK 向下与 GB 2312 编码兼容,向上支持 ISO 10646.1 国际标准,是前者向后者过渡过程中的一个承上启下的标准。ISO 10646 是国际标准化组织 ISO 公布的一个编码标准,即 Universal Multilpe-Octet Coded Character Set(简称UCS),大陆译为《通用多八位编码字符集》,台湾译为《广用多八位元编码字元集》,它与 Unicode 组织的 Unicode 编码完全兼容。ISO 10646.1 是该标准的第一部分《体系结构与基本多文种平面》。我国 1993 年以 GB 13000.1 国家标准的形式予以认可(即 GB 13000.1 等同于 ISO 10646.1)。
GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年10月制定, 1995年12月正式发布,目前中文版的WIN95、WIN98、WINDOWS NT以及WINDOWS 2000、WINDOWS XP、WIN 7等都支持GBK编码方案。
一、字汇  GBK 规范收录了 ISO 10646.1 中的全部 CJK 汉字和符号,并有所补充。具体包括:
1. GB 2312 中的全部汉字、非汉字符号。
2. GB 13000.1 中的其他 CJK 汉字。以上合计 20902 个 GB 化汉字。
3. 《简化字总表》中未收入 GB 13000.1 的 52 个汉字。
4. 《康熙字典》及《辞海》中未收入 GB 13000.1 的 28 个部首及重要构件。
5. 13 个汉字结构符。
6. BIG-5 中未被 GB 2312 收入、但存在于 GB 13000.1 中的 139 个图形符号。
7. GB 12345 增补的 6 个拼音符号。
8. 汉字“○”。
9. GB 12345 增补的 19 个竖排标点符号(GB 12345 较 GB 2312 增补竖排标点符号 29 个,其中 10 个未被 GB 13000.1 收入,故 GBK 亦不收)。
10. 从 GB 13000.1 的 CJK 兼容区挑选出的 21 个汉字。
11. GB 13000.1 收入的 31 个 IBM OS/2 专用符号。
12.未录入《新华字典》上的一些字,如“韡”的简体。
二、码位分配及顺序  GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。
全部编码分为三大部分:
1. 汉字区。包括:
a. GB 2312 汉字区。即 GBK/2: B0A1-F7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。
b. GB 13000.1 扩充汉字区。包括:
(1) GBK/3: 8140-A0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。
(2) GBK/4: AA40-FEA0。收录 CJK 汉字和增补的汉字 8160 个。CJK 汉字在前,按 UCS 代码大小排列;增补的汉字(包括部首和构件)在后,按《康熙字典》的页码/字位排列。
2. 图形符号区。包括:
a. GB 2312 非汉字符号区。即 GBK/1: A1A1-A9FE。其中除 GB 2312 的符号外,还有 10 个小写罗马数字和 GB 12345 增补的符号。计符号 717 个。
b. GB 13000.1 扩充非汉字区。即 GBK/5: A840-A9A0。BIG-5 非汉字符号、结构符和“○”排列在此区。计符号 166 个。
3. 用户自定义区:分为(1)(2)(3)三个小区。
(1) AAA1-AFFE,码位 564 个。
(2) F8A1-FEFE,码位 658 个。
(3) A140-A7A0,码位 672 个。
第(3)区尽管对用户开放,但限制使用,因为不排除未来在此区域增补新字符的可能性。
三、字形  GBK 对字形作了如下的规定:
1. 原则上与 GB 13000.1 G列(即源自中国大陆法定标准的汉字)下的字形/笔形保持一致。
2. 在 CJK 汉字认同规则的总框架内,对所有的 GBK 编码汉字实施“无重码正形”(“GB 化”);即在不造成重码的前提下,尽量采用中国新字形。
3. 对于超出 CJK 汉字认同规则的、或认同规则尚未明确规定的汉字,在 GBK 码位上暂安放旧字形。这样,在许多情况下 GBK 收入了同一汉字的新旧两种字形。
4. 非汉字符号的字形,凡 GB 2312 已经包括的,与 GB 2312 保持一致;超出 GB 2312 的部分,与 GB 13000.1 保持一致。
5. 带声调的拼音字母取半角形式。
ISO/IEC 10646 是一个字符集的国际标准编号,全称 Information technology -- Universal Coded Character Set (UCS) ,缩写为UCS。中文常翻译作通用多八位编码字符集。这个标准用于世界上各种语言文字的书面形式的表示、传送、交换、处理、储存、输入和展示,也包含了附加符号[1]。
为了在电脑及电子装置内处理各地区本身的字符,世界各地采用了不同的编码标准。例如香港及台湾使用繁体字,通常采用大五码。中国内地使用简体字,通常采用国标码。可惜,各种不同的编码标准互不兼容,一个编码在不同的编码标准内可能代表不同的字符。
当某台电脑上发出的电子资讯传到另一电脑上时,假若两台电脑采用了不同的编码标准,即使通过转码,也可能会出现乱码或某些字符不能正确地显示等问题[6]。而制订 ISO/IEC 10646 国际编码标准的目的,便是为了提供一套统一的字符编码标准,包含世界上所有文字,使电子通讯及资料交换不需转码,并且可以在一个电脑平台上处理多种语言文本。
采用该标准后,世界各地不同的电脑系统之间便能更准确地储存、处理、传递及显示各种语文的电子资讯,从而加强各地间电子资讯的流通及推动 电子交易的进行。

Unicode 与 ISO/IEC 10646

Unicode与ISO/IEC 10646国际编码标准从内容上来说是同步一致的。在1991年,Unicode学术学会与ISO国际标准化组织决定共同制订一套适用于多种语言文本的通用编码标准。Unicode与ISO/IEC 10646国际编码标准于1992年1月正式合作发展一套通用编码标准。自此以后,两个组织便一直紧密合作,同步发展Unicode及ISO/IEC 10646 国际编码标准[8]。
Unicode3.0版本与ISO/IEC 10646 国际编码标准所包含的字符及使用的编码是相同的,包括东亚的汉字字符。统一码3.0版本已于2000年2月由Unicode联盟正式推出,当中收纳了49,194个来自世界各地不同语言的字符,其中包含27,484个汉字字符。此外,国际标准化组织提供 ISO 10646 国际编码标准内的字符及编码资料,Unicode 学术学会则对这些字符及编码资料提出应用的方法以及语义资料作补充。
在Unicode3.1版已于2001年发表,除了Unicode 3.0 版中的49194个字符,又增加了44,946个新字符,其中42,711个为汉字字符。
Unicode 7.0已于2014年6月16日发布,与ISO/IEC 10646:2012标准加上修订版1和修订版2同步,新增2,834个字符[9],总计112,956个字符,其中汉字字符74,616个[10]。

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
最初,Internet上只有一种字符集——ANSI的ASCII字符集(American Standard Code for Information Interchange, “美国信息交换标准码),它使用7 bits来表示一个字符,总共表示128个字符,后来IBM公司在此基础上进行了扩展,用8bit来表示一个字符,总共可以表示256个字符,充分利用了一个字节所能表达的最大信息

ANSI字符集:ASCII字符集,以及由此派生并兼容的字符集,如:GB2312,正式的名称为MBCS(Multi-Byte Chactacter System,多字节字符系统),通常也称为ANSI字符集。

UNICODE与UTF8,UTF16

由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,产生了Unicode字符集,它固定使用16 bits(两个字节)来表示一个字符,共可以表示65536个字符

标准的Unicode称为UTF-16(UTF:UCS Transformation Format )。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。 (Unicode字符集有多种编码形式)

例如“连通”两个字的Unicode标准编码UTF-16 (big endian(存放时高位在前,低位在后))为:DE 8F 1A 90
而其UTF-8编码为:E8 BF 9E E9 80 9A

当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件一般采用三种方式来决定文本的字符集和编码:
检测文件头标识,提示用户选择,根据一定的规则猜测
最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表:
EF BB BF    UTF-8
FE FF     UTF-16/UCS-2, little endian
FF FE     UTF-16/UCS-2, big endian
FF FE 00 00  UTF-32/UCS-4, little endian.
00 00 FE FF  UTF-32/UCS-4, big-endian.

Unicode:
unicode.org制定的编码机制, 要将全世界常用文字都函括进去.
在1.0中是16位编码, 由U+0000到U+FFFF. 每个2byte码对应一个字符; 在2.0开始抛弃了16位限制, 原来的16位作为基本位平面, 另外增加了16个位平面, 相当于20位编码, 编码范围0到0x10FFFF.

UCS:
ISO制定的ISO10646标准所定义的 Universal Character Set, 采用4byte编码.

Unicode与UCS的关系:
ISO与unicode.org是两个不同的组织, 因此最初制定了不同的标准; 但自从unicode2.0开始, unicode采用了与ISO 10646-1相同的字库和字码, ISO也承诺ISO10646将不会给超出0x10FFFF的UCS-4编码赋值, 使得两者保持一致.

UCS的编码方式:

UCS-2, 与unicode的2byte编码基本一样.

UCS-4, 4byte编码, 目前是在UCS-2前加上2个全零的byte.

UTF: Unicode/UCS Transformation Format

UTF-8, 8bit编码, ASCII不作变换, 其他字符做变长编码, 每个字符1-3 byte. 通常作为外码. 有以下优点:
与CPU字节顺序无关, 可以在不同平台之间交流
* 容错能力高, 任何一个字节损坏后, 最多只会导致一个编码码位损失, 不会链锁错误(如GB码错一个字节就会整行乱码)

UTF-16, 16bit编码, 是变长码, 大致相当于20位编码, 值在0到0x10FFFF之间, 基本上就是unicode编码的实现. 它是变长码, 与CPU字序有关, 但因为最省空间, 常作为网络传输的外码.
UTF-16是unicode的preferred encoding.

UTF-32, 仅使用了unicode范围(0到0x10FFFF)的32位编码, 相当于UCS-4的子集.

UTF与unicode的关系:

Unicode是一个字符集, 可以看作为内码.
而UTF是一种编码方式, 它的出现是因为unicode不适宜在某些场合直接传输和处理.
 UTF-16直接就是unicode编码, 没有变换, 但它包含了0x00在编码内, 头256字节码的第一个byte都是0x00, 在操作系统(C语言)中有特殊意义, 会引起问题. 采用UTF-8编码对unicode的直接编码作些变换可以避免这问题, 并带来一些优点.

windows平台,UTF-16LE也被称作unicodeUTF-16BE被称作unicode big endian。这是因为Windows内核使用了UTF-16LE编码。这种叫法并不规范。

unicode编码把一个汉字与一个数字联系在一起。例如“汉”对应的数字是27721,十六进制编码是0x6C49。


如果“字符”是以在Unicode中的序号存在的,那么我们称这种字符串为Unicode字符串或者宽字节字符串。在Unicode中,每个字符都占两个字节。如,"中文123"(占10字节)。

UTF是UCS Transformation Format的缩写。它规定了unicode编码的传输格式,即用哪几个字节表示一个unicode编码。同一个unicode编码可以有不同的传输格式。

例如“汉”的编码0x6C49在UTF-8中被映射成E6 B1 89。在UTF-16LE中被映射成49 6C。在UTF-16BE中被映射成6C 49。

在jvm内部,虚拟机管理数据(内存里)时,或者在进行对象序列化的时候,字符(串)都是以unicode编码方式的。

但是在jvm中,字符(串)是以char 这种(存储)形式存放的,一个char占2个字节(例如可以定义char c='字'),就是“字”和“Z”是同样占2个字节的;而在对象序列化后,对象是进行UTF-8存储的,一个中文占2个字节,而英文、数字等只占一个字节,所以导致系列化以后的对象只占平时的大约一半的空间(当全是中文时占用相同的空间为全是英文时unicode占用的空间是UTF-8的2倍)

GBK字库 ISO 10646 Unicode UTF8相关推荐

  1. gbk, gb2312,big5,unicode,utf-8,utf-16的区别

    本文转自http://blog.chinaunix.net/uid-446337-id-94462.html详细说明了各种编码的区别于联系,对于支持国际化很重要,否则各种乱码能搞死人! Unicode ...

  2. 大端小端,ascii,unicode,utf8,utf16,utf32,gb2312,gbk,gb18030等字符编码问题

    字符编码的问题让我困惑了好久的一段时间,其实简单的想,字符编码没有什么东西的,可是想真弄明白还是花去了我一点时间,前端时间写了一个简单的log程序,主要的工作就是支持系统运行时输出日志信息,同时允许定 ...

  3. [转]各种编码ANSI、GB2312、GBK、GB18030、UNICODE以及UTF-8傻傻分不清!

    计算机编程中的编码一直是让新手非常头疼的问题,特别是 GBK.GB2312.UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚,看一遍貌似懂了,但实际使用的时候又 ...

  4. ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别

    ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...

  5. 字符编码详解及由来(UNICODE,UTF-8,GBK)

    字符编码详解及由来(UNICODE,UTF-8,GBK) 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK) - 2009-01-29 09:53     一直对 ...

  6. ES2018 学习笔记(4)Unicode 和 ISO 10646

    一致性 A conforming implementation of ECMAScript must interpret source text input in conformance with t ...

  7. ascii码 iso 8859-1 Unicode 字符编码 UTF8编码 区别 表格

    第一:编码简单描述 一.ASCII码:美国佬最初把自己的语言用计算表示,发现 0--127  能把字母表+其它符号全能表示出来 二.  iso 8859-1:欧洲人,0---127 是ASCII码,1 ...

  8. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解 1

    ASCII字符集编码     ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符.     ...

  9. C#_汉字与GBK,Unicode,UTF-8编码之间的转换

    IT发展至今,字符编码版本众多,目前流行的GBK,Unicode,UTF-8编码与汉字的转换可用如下代码: private void button1_Click(object sender, Even ...

  10. 字符集编码详解【ASCII 、GB2312、GBK、GB18030、unicode、UTF-8】(转)

    ASCII字符集编码 ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符. 只支持ASCI ...

最新文章

  1. long 雪花算法_海量数据分库分表方案(一)算法方案
  2. 数据还是模型?人类知识在深度学习里还有用武之地吗?
  3. 伸展树(Splay tree)图解与实现
  4. Epos消费管理系统复制迁移SQL SERVER 2005数据库
  5. python拼图游戏代码_教你用Python自制拼图小游戏,轻松搞定熊孩子
  6. ios微信下vue项目组件切换并自动播放音频的解决方案
  7. 多线程的关键是,不同线程对象要独立
  8. 计算机老师一句话,40句感恩教师的一句话
  9. 将Map转换成List
  10. Android 项目必备(二十三)-->减小 APK 大小
  11. python培训班靠谱吗-天津靠谱的python培训班
  12. 制作 macOS Mojave U盘USB启动安装盘方法教程 (全新安装 Mac 系统)
  13. python给word添加换行换页符
  14. css段落首行缩进,文字间距
  15. 你不得不学会的英文赞美句子
  16. java 连接多实例_Java如何连接多实例SQL Server?
  17. 获取log文件信息,并保存至Excel文件
  18. php.net国内镜像及php源码下载[非常快]
  19. 树莓派python离线语音识别_Raspberry Pi
  20. 鸿蒙渊更新公告,《天下3》更新公告(版本2.0.706)

热门文章

  1. 好用的源码行数统计工具——cloc
  2. 油猴插件官网下载及Userscript+安装教程
  3. noip2017普及组
  4. 中间件——activityMQ
  5. 在Kali中使用Ettercap进行ARP欺骗
  6. ORA-01017 错误
  7. 从0开始,设计研发一个全功能通用大数据系统
  8. matlab按图像边缘抠图_不会抠图?保姆级抠图教程!手把手教你抠图(二)
  9. BP神经网络预测matlab程序销售量预测
  10. Windows 批处理(bat)语法大全