`
xiaoheliushuiya
  • 浏览: 404578 次
文章分类
社区版块
存档分类
最新评论

字符代码体系基础知识

 
阅读更多

最近在学习《中文自然语言处理》,对其中字符集、代码体系有了更多的了解,区分了之前一些模糊的概念,下面的大部分是我自己敲进去的,顺带说一下,还是维基百科可靠性最高。。

先小学术一下~

字符代码体系可分为以下四种:
-交换码:交换目的,用于多台计算机之间的通信,例如ASCII中最后一个I就是交换(Interchange)的缩写。
-机内码:计算机实际上存储与运算的代码,又称为内码,大多是根据交换码稍加修改而来的,平时说的ASCII、GB2312、Big5主要内码。
-输入码:字符输入目的、例如拼音、五笔等输入法。
-字型码:字模数据、即字体库,通过内码计算偏移量能让系统找到需要显示的字体,早期的ASCII的字模文件很小,都是直接做在BIOS上的。而现在的字体,一般都是做成TTF文件放在外部存储器上。

下面对平时常见的的名词进行解释:ASCII、GB2312-80、GB18030、GBK、BIG5、UCS、Unicode、UTF-8、UTF-16、Base64,我之前对UCS、Unicode和UTF-8就不是特别清楚。。

ASCII
ASCII码,是美国信息交换标准码(American Standard Code for Information Interchange)的缩写,也是最早最经典的字符代码体系,它既是交换码又是机内码,并且与键盘键敲击的脉冲信号也是先对应的,通过计算ASCII码的实际二进制值可以得到字体在字模库中的偏移量。ASCII码使用一个字节来表示英文字母、数字和符号、高八位始终为0,主要用途是校验位或者是标志位。剩下的七位,则可以表示27=128个字符、这对于英文字符时绰绰有余的:32个控制字符(回车、退格、换行、响铃等)和94个可显示字符(字母、数字、符号)。通过下图ASCII码的代码空间可以看出,设计的很合理,C0区时控制字符区、GL区是可显示字符区:

ASCII-1

GB2312-80
GB2312-80是信息交换用汉字编码字符集----基本集的缩写,80代表的是1980年发布的。用于汉字的数量众多,光常用字就好几千个,一个字节肯定是不能够表示这么多字符的,所以GB2312使用了两个字节来表示一个字符,这样一来,可以表示216=65536个字符,是足够用的。由于历史原因(~_~),英文字符是必须要用到的,所以GB2312参考了ASCII码的设计方式,两个字节中都应用了ASCII码的代码空间,如下图,C0区、GL区、C1区、GR区;但是如何与ASCII码区分开来呢?普遍采取的做法是:将第一字节的高八位置1,则连续的两个字节表示一个汉字,若高八位是0则是一个ASCII码字符。在GB2312中,第一个字节称为,第二个字节称为,区位码就是这么来的,总共有94个区和位。其中前1区~9区表示符号数字西文字符、10区~15区和88区~94区都是空的(计算显示字体所需要的偏移量用的)、16区~55区是最常用的汉字,即一级汉字(3755个)、56区~87区是次常用的,即二级汉字(3008个 )。

GBK
GB2312 仅收汉字 6763 个,这大大少于现有汉字,随着时间推移及汉字文化的不断延伸推广,有些原来很少用的字,现在变成了常用字,例如:朱镕基的“镕”字,未收入 GB2312-80,现在大陆的报业出刊只得使用(金+容)、(金容)、(左金右容)等来表示,形式不一而同,这使得表示、存储、输入、处理都非常不方便,而且这种表示没有统一标准。为了解决这些问题,以及配合 UNICODE 的实施,全国信息技术化技术委员会于1995年12月1日《汉字内码扩展规范》。GBK 向下与 GB2312 完全兼容,向上支持 ISO 10646 国际标准,在前者向后者过渡过程中起到的承上启下的作用。

GB18030
GB18030 是最新的汉字编码字符集国家标准, 向下兼容 GBK 和 GB2312 标准。 GB18030 编码是一二四字节变长编码。一字节部分从 0x0~0x7F 与 ASCII 编码兼容。 二字节部分, 首字节从 0x81~0xFE, 尾字节从 0x40~0x7E 以及 0x80~0xFE, 与 GBK 标准基本兼容。 四字节部分, 第一字节从 0x81~0xFE, 第二字节从 0x30~0x39, 第三和第四字节的范围和前两个字节分别相同。 四字节部分覆盖了从 0x0080 开始, 除去二字节部分已经覆盖的所有 Unicode 3.1 码位。也就是说, GB18030 编码在码位空间上做到了与 Unicode 标准一一对应,这一点与 UTF-8 编码类似。

BIG5
Big5码是台湾地区对繁体汉字的编码体系,它也参考了ASCII码的设计,不过有所改变。第一个字节分为C0区和GL区、第二个字节则不区分,全部用来编码,则可以表示94*128个繁体字。而实际上Big5码收录大概1万个繁体字,其中包括了很多不常用的汉字。十年前流行的内码转换工具:南极星、金山内码工具等等,都是当时游戏玩家的必备工具~

UCS
UCS是Universal multiple--Octet Coded Character Set的英文缩写(有时也简称为Universal Character Set),是ISO从1984年发起的国际标准,试图囊括所有的人类自然语言,所以UCS采取了四字节编码的方式,并与1999年发布了UCS第一版,即ISO 10646-1。为什么经历了十五年才制定出一个标准呢?后面会提到,因为国际标准和行业事实标准还是会有冲突的(ISO的OSI模型和TCP/IP模型就是典型例子),正是因为各大IT公司不断的否决才导致,UCS的发布一拖再拖。UCS四个字节中,分为组八位(G-Ocbet)、面八位(P-Ocbet)、行八位(R-Ocbet)、位八位(C-Ocbet)。组八位中的高八位也是为0,设计初衷和ASCII码一样----校验位。共有128组、256面、256行、256位,所能表示的字符数是个可怕的数字。。但实际上呢,只有0、1、2字面上收录了字符,其他都是空的。所以才导致了Unicode的出现,请看UCS的代码空间,“浪费严重”

image003

Unicode
Unicode是Xerox和Apple也在1984年成立的工作组,开始Unicode原始设计;1989年发布了Unicode草案第一版;到1991年,IBM、DEC、SUN、Xerox、Apple、Microsoft、Novell成立Unicode协会,并不断与ISO沟通协调,与1996年推出的Unicode2.0完全与UCS兼容,即在UCS的0组0面就是Unicode的编码。而Unicode与UCS的转换很简单,Unicode每个字符前面加上两个全0的字节即为UCS字符、UCS字符去掉前面两个为0的字节即为Unicode字符。Unicode的设计也是相当经典:
-定长16位编码,使得计算机处理起来很容易,毕竟一次性处理2两个字节在当时比4个字节要容易的多
-采取全编码方式(6万个字符足以),不区分C0、GL区,并迫使UCS也接受了这种方式
-完备编码,容纳已有的标准字符,GB2312、BIG5、ASCII中的字符都能在Unicode中找到
-纯字符编码,不区分语言、国别
-统一了中、日、韩的汉字字符
Windows系统在Vista以后,系统内核中已经采用了Unicode编码方式。现在Unicode版本已经到4.0了,我们通常所说的 Unicode,实际上是指某一种 UTF,比如:Windows 记事本中为 UTF-16,IE 浏览器中为 UTF-8。

Base64
因为历史原因,计算机网络协议只能传输ASCII码、所以汉字是不能直接传输的,需要进一步编码。最常见的就是浏览器地址栏URL中的一串表示,如http://[2001:4860:8005::84]/search?q=cache:p2nZf9S7OpIJ:icolumn.net/%3Fp%3D1830+%E5%86%8D%E8%B0%88Google%E4%BA%8B%E4%BB%B6&cd=2&hl=en&ct=clnk,其中%中的那些数据实际上是经过再次编码得到的数据,常见的UUEncode、Base64、UTF等就是为了在网络上传输而产生的编码方案。Base64,是这样实现的:将3个8位转换为4个6位(Base64名字的由来),每个6位前面补两个0,最后变成4个字节,每个字节的值都是0~63在之前,若是直接传输,而ASCII码中的控制字符可能会与网络协议中的控制字符作用相冲突,所以Base64进行了再次编码,0~25-大写字母、26~51-小写字母、52~61-阿拉伯数字、62-+、63-/。将这些可视字符通过网络发送过去,接收方再逆向解码得到原始数据。

UTF-8、UTF-16
UTF-8(8 位Universal Character Set/Unicode Transformation Format)是一种针对Unicode的可变长度字符编码(定长码),也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。 UTF-8使用一至四个字节为每个字符编码: 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码(Unicode范围由U+0080至U+07FF)。其他基本多文种平面(BMP)中的字符(这包含了大部分常用字)使用三个字节编码。其他极少使用的Unicode 辅助平面的字符使用四字节编码。 对上述提及的第四种字符而言,UTF-8使用四个字节来编码似乎太耗费资源了。但UTF-8对所有常用的字符都可以用三个字节表示,而且它的另一种选择,UTF-16编码,对前述的第四种字符同样需要四个字节来编码,所以要决定UTF-8或UTF-16哪种编码比较有效率,还要视所使用的字符的分布范围而定。不过,如果使用一些传统的压缩系统,比如DEFLATE,则这些不同编码系统间的的差异就变得微不足道了。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。

分享到:
评论

相关推荐

    计算机基础知识试题(1).docx

    计算机基础知识试题(1)全文共5页,当前为第1页。1、计算机主机是由cpu与下列哪种设备共同构成的(d )a.控制器 b.运算器 c.输入、输出设备 d.内存储器2、计算机能直接执行的指令包括两部分,它们是(b ) a.源...

    1. 体系介绍和环境配置

    15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程 22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞...

    2005-2009软件设计师历年真题

     • 软件开发项目管理基础知识(时间管理、成本管理、质量管理、人力资源管理、风险管理等)及其常用管理工具  • 主要的软件开发方法(生命周期法、原型法、面向对象法、CASE)  • 软件开发工具与环境知识  •...

    软件设计师重点考点

    1、计算机硬件基础知识: 1 1.1计算机系统结构 1 1.2 计算机中的编码: 3 1.3存储器系统 8 1.4中央处理器CPU 15 1.5 输入/输出系统 17 1.6 计算机总线结构 19 1.7 体系结构其他的知识 19 1.8 计算机的安全、可靠性...

    使用Android 系统测量软件开发技术 [武安状 主编] 2014年版

    第3章 Java语言基础3.1 Java简介3.1.1 Java概述3.1.2 Java语言特点3.1.3 Java组成与体系3.1.4 Java运行体系3.2 Java基础3.2.1 Java数据类型3.2.2 Java常量3.2.3 Java变量3.2.4 Unicode字符集3.3 Java基本元素3.3.1 ...

    Intel汇编语言程序设计 第四版

    从磁盘基础知识到Intel指令编码、浮点运算等相关知识都做了深入而细致的讲解。 本书是佛罗里达国际大学等多所美国大学采用的计算机基础教材,内容广博,但又讲解得非常深入,书中结合最令人感兴趣的编程问题逐步...

    Intel汇编语言程序设计(第四版)

    从磁盘基础知识到Intel指令编码、浮点运算等相关知识都做了深入而细致的讲解。 本书是佛罗里达国际大学等多所美国大学采用的计算机基础教材,内容广博,但又讲解得非常深入,书中结合最令人感兴趣的编程问题逐步...

    Java2核心技术.part5

    基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝性 1. 2.6体系结构...

    嵌入式Linux驱动开发基础总结

    * arch/: arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,例如i386就是关于intel cpu及与之相兼容体系结构的子目录。 * block/: 部分块设备驱动程序; * crypto: ...

    matlab子集代码-awesome-es:电子科技大学软件学院本科阶段计算机体系结构学习&嵌入式开发的公开课/书籍/Blog/资料整理

    基础知识 作为一名软件学院的本科生,必须牢牢掌握以下计算机相关的知识: 技能点名称 技能点内容 , , 链表,栈,队列,字符串,二叉树,图,查找,排序,以及一些面试中经常考察的模板例如动态规划,滑动窗口,快慢...

    郭克华 J2ME视频配套课件 及源码 ppt

    入门 01体系介绍和环境配置 其他 25J2ME代码优化 高级界面开发 02高级界面开发1:基本界面和Command 03高级界面开发2:Command事件和List 04高级界面开发3:TextBox,...15RMS编程1:基础知识 16RMS编程2:高级知识 17案例3

    Professional Linux Kernel Architecture

    内核基础知识:介绍Linux内核的基本概念、组成部分和体系结构,包括进程管理、内存管理、设备驱动、文件系统等。 内核源代码结构:讲解Linux内核源代码的组织结构和模块化设计,帮助读者理解内核源代码的组织方式和...

    J2ME移动开发实战教学视频(9.多线程.rar)

    15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程 22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞...

    3. 高级界面开发2Command事件和List

    15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程 22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞...

    3.高级界面开发2Command事件和List1\03-2.swf

    15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程 22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞...

    3.高级界面开发2Command事件和List1\03-3.swf

    15. RMS编程1基础知识 16. RMS编程2高级知识 17. 案例3 18. 网络编程1Socket编程 19. 案例4聊天室开发 20. 网络编程2UDP编程 21. 网络编程3HTTP编程 22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     ·使用visual c++ 2010支持的两种c++语言技术讲述c++编程的基础知识  ·分享c++程序的错误查找技术,并介绍通用的调试原则讨论每一个windows应用程序的结构和基本元素  ·举例说明如何使用mfc开发本地windows...

    Python语言程序设计源代码.zip

    本书围绕数据的表示、存取、计算、分析和可视化等内容分两部分详细介绍Python语言程序设计:Python程序设计基础部分(第1章至第6章、第10章)主要介绍Python作为一门高级编程语言所涉及的语法知识、控制结构、函数与...

    《Java程序设计案例教程》课程标准.doc

    其中包括Java语言基础知识;Java程序集成开发环境;Java面向对象的编 程思想。通过本教材的学习,学生将了解有关Java的各种先进技术,掌握网络环境下应 用的开发机制,熟练掌握使用Java开发独立的桌面应用程序;同时...

    传智播客扫地僧视频讲义源码

    18_引用的基础知识(定义和函数参数) 19_复杂数据类型引用做函数参数__传智扫地僧 20_引用的本质剖析_传智扫地僧 21_函数返回值是引用(当左值右值)_传智扫地僧 源码及文档 01_上一次课程复习 02_指针的引用_传智扫地...

Global site tag (gtag.js) - Google Analytics