`
cuixuxucui
  • 浏览: 346711 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

字符集学习笔记(一)

 
阅读更多

 

摘自http://bbs.9ria.com/viewthread.php?tid=19624

我们国家先后搞过三套汉字编码标准,既GB2312、GBK和GB18030。

 

一、GB2312

GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,1981年5月1日实施。共7445个图形字符,其中包括6763个汉字,一级汉字3755个,二级汉字3008个。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。

区位:GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。各区包含的字符如下:01-09区为特殊符号;16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序;10-15区及88-94区则未有编码。

双字节表示:两个字节中前面的字节为第一字节,后面的字节为第二字节。习惯上称第一字节为“高字节”,而称第二字节为“低字节”。“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。以GB2312字符集的第一个汉字“啊”字为例,它的区号16,位号01,则区位码是1601,在大多数计算机程序中,高字节和低字节分别加0xA0得到程序的汉字处理编码0xB0A1。计算公式是:0xB0=0xA0+16, 0xA1=0xA0+1。

 

二、BIG5

又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大众 (FIC)创立,故称大五码。Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、IBM PS55、王安码等,彼此不能兼容;另一方面,台湾政府当时尚未推出官方的汉字编码,而中国大陆的GB2312编码亦未有收录繁体中文字。Big5字符集共收录13,053个中文字,该字符集在中国台湾使用。

Big5码使用了双字节储存方法,以两个字节来编码一个字。第一个字节称为“高位字节”,第二个字节称为“低位字节”。高位字节的编码范围0xA1-0xF9,低位字节的编码范围0x40-0x7E及0xA1-0xFE。 

 

三、GBK

随着计算机应用的普及,一些偏僻的人名、地名及古籍用字遇到了麻烦,例如“镕”就不在GB2312标准中。在这种情况下,我国的信息标准化委员会就对原标准进行了扩充。他们把常用繁体字(实际上就来源于台湾的BIG5标准)填充到了原来的编码标准中留下空白码段,使汉字个数扩到2万多个。GBK虽然部分解决了使用繁体字的问题,带来的副作用却很大。因为在GB2312中留下的空白码段有两个用途,大部分是为了避免和西方单字节编码标准的冲突,还有就是留给用户造字用的。而GBK却占用了这些本不该使用的空白,例如冲掉用户自造字、显示混乱等。而且对于以往的大量应用软件来说,如果他们没有专门为GBK编码标准进行改造,往往就会出错。但是还算好,尽管大家对GBK的抱怨很多,慢慢地很多国际公司和国际标准组织也都勉强接受了GBK标准,把它用来替换GB2312。作为制定GBK的我国政府来说,我想这里可能还有另外一个目的,那就是因为GBK是包括GB2312和BIG5(繁体字标准)的一个超集,所以希望东亚使用汉字的地区都能采用这个标准,但这个目的在今天来看并没有达到,BIG5编码标准和我们的GB2312一样仍然在港澳台及海外被广泛使用。

GBK是GB2312-80 的扩展,是向上兼容的。它包含了 20902 个汉字,其编码范围是 0x8140-0xfefe,剔除高位 0x80 的字位。

 

四、GB18030

GB 18030的全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000年3月17日发布的新的汉字编码国家标准,2001年8月31日后在中国市场上发布的软件必须符合本标准。

GB 18030标准采用单字节、双字节和四字节三种方式对字符编码。单字节部分使用0×00至0×7F码(对应于ASCII码的相应码)。双字节部分,首字节码从0×81至0×FE,尾字节码位分别是0×40至0×7E和0×80至0×FE。四字节部分采用GB/T 11383未采用的0×30到0×39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×81308130到0×FE39FE39。其中第一、三个字节编码码位均为0×81至0×FE,第二、四个字节编码码位均为0×30至0×39。 

既然常用汉字不过3000多个,最多到6000个左右基本已覆盖99%以上的实际需求,为什么还要搞更大规模的编码标准呢?相信前面的几位网友对此都不太理解。这是信息的国际化交流所产生的世界需求,就像当初秦统一文字一样,现在的形势是要统一国际文字编码。比方来说,如果一个台湾朋友给你发一封信,而信的内容是按BIG5编码标准写的,我们要正确显示它就需要了解BIG5编码的细节以及一套字库,反过来也是一样。而对于一个应用程序来说,譬如一个BBS网站,它如果同时接受台湾的网友和大陆的网友一起聊天,如果它不作特别约定,它是不知道用户送进来的文字是什么方式编码的,因此显示的结果就是一片混乱。所以,在早期,一些中文BBS网站在登录或发言的时候要求用户选择所用的编码方式。很显然,这是不方便的,对于信息的存储和传输来说,也需要额外的处理时间和标志,对于程序开发人员来说,各种五花八门的编码方式更是浪费人力、物力。

也就是说是信息的国际化以及信息产品的国际化要求统一文字编码,以保障任何人发给你的信息你都可以理解而不需要对方告诉你他的编码方式。GBK的诞生也基本带有这个目标,它希望能让港澳台和大陆一节海外华人使用同一编码标准;对于GB18030来说,目标就更大了,它希望整个东亚都能使用我们的汉字编码标准。可是,愿望是良好的,现实是残酷的。因为这些的目标的实现要求这些地区的操作系统、应用软件都得支持GBK/GB18030,特别是对方的输入软件和显示字库也得支持才行。很显然,我们没办法让大陆之外的人都听我们的,结果是除了GBK在华人地区有一定推广以外,GB18030就遇到了事实上的抵制。这种抵制除了因为这种编码本身不科学(会增加程序开发的成本也增加软件出错的几率)以外,更重要的原因是,人们已经有了一个更好的选择,那就是“UNICODE”。 

UNICODE的背后支持者是微软公司,而微软在计算机软件行业是处于霸主地位,这是无法否认的。从操作系统、数据库、应用软件到游戏,微软的产品布满全球各个角落,所以他提出的编码标准天然的就具有绝对优势。也就是说,如果某个公司是遵守UNICODE标准开发的软件,就可以保证在全球的Windows(NT)平台上正确运行和显示,包括中国大陆和港澳台、日本;而如果遵守GB18030标准呢,则至多只能保证在我国大陆地区的简体中文版上正确运行。况且,微软虽然迫于中国压力,对于简体中文版操作系统做了支持GB18030的改动,但这种被迫的改动只会是表面的,作为国际公司,他决不可能更改Windows(NT)内核的UNICODE编码方式来适应一个地方不甚科学的需要。因此,从国外到国内,大家会支持谁呢?是我们怪异的GB18030还是被广泛认可的UNICODE?结果是显而易见的,人们会选择优势标准,我们阻挡不了什么。我们的行政手段还没到可以左右世界的地步。

现在还没有任何一个操作系统或软件实现了GBK2K的支持。

五、Unicode

Unicode字符集编码是Universal Multiple-Octet Coded Character Set 通用多八位编码字符集的简称,是由一个名为 Unicode 学术学会(Unicode Consortium)的机构制订的字符编码系统,支持现今世界各种不同语言的书面文本的交换、处理及显示。该编码于1990年开始研发,1994年正式公布,最新版本是2005年3月31日的Unicode 4.1.0。UTF-8是Unicode的其中一个使用方式。 UTF是 Unicode Translation Format,即把Unicode转做某种格式的意思。 

UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。 

UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。 

UTF-32、UTF-16 和 UTF-8 是 Unicode 标准的编码字符集的字符编码方案,UTF-16 使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码;UTF-32 即将每一个 Unicode 代码点表示为相同值的 32 位整数。

ActionScript3 采用的就是 Unicode 字符集处理字符串(String 类型)类型 进行字符运算。

分享到:
评论

相关推荐

    Python学习笔记(干货) 中文PDF完整版.pdf

    1.6 第一个Python程序 1.7 集成开发工具 2、Python语法基础 2.1 Python中的输入输出函数 2.2 Python中的注释 2.3 Python中的变量 3、Python中的基本数据类型 3.1 整型-int 3.2 浮点型-float 3.3 布尔类型-...

    Visual C#学习笔记光盘

    Visual C#学习笔记光盘 简介:本书由浅入深地讲解Visual C# 2005编程知识,全书内容分为6篇,共27章,第一篇介绍Visual Studio 2005开发环境和C#基础,其中包括Visual C# 2005简介,C#语言基础,面向对象编程...

    (初级)机器学习笔记一:python基础语法之数据类型和字符串

    从零基础开始学习AI。python具有解释易学性特点,且有强大的科学计算工具,是现在数据分析和人工智能常用的工具语言之一。 笔记一:预期课之python的基本数据类型与字符串的运算使用。

    Go学习笔记(第四版).zip

    Go 学习笔记, 第 4 版 4.4 Struct 47 第 5 章 ⽅法 53 5.1 ⽅法定义 53 5.2 匿名字段 54 5.3 ⽅法集 56 5.4 表达式 56 第 6 章 接⼝ 60 6.1 接⼝定义 60 6.2 执⾏机制 62 6.3 接⼝转换 63 6.4 接⼝技巧 65 第 7 章 ...

    Go 学习笔记 第四版

    Go 学习笔记, 第 4 版 4 4.4 Struct 47 第 5 章 ⽅方法 53 5.1 ⽅方法定义 53 5.2 匿名字段 54 5.3 ⽅方法集 56 5.4 表达式 56 第 6 章 接⼝口 60 6.1 接⼝口定义 60 6.2 执⾏行机制 62 6.3 接⼝口转换 63 6.4 接⼝...

    Go 语言编程 + Go 学习笔记

    Go 语言编程 + Go 学习笔记, 第 部分 语 第 1 章 类型 1.1 变量 1.2 常量 1.3 基本类型 1.4 引 类型 1.5 类型转换 1.6 字符串 1.7 指针 1.8 定义类型 第 2 章 表达式 2.1 保留字 2.2 运算符 2.3 初始化 2.4 控制流 ...

    字符编码学习

    Unicode字符集(简称为UCS),国际标准组织于1984年4月成立ISO/IEC JTC1/SC2/WG2工作组,针对各国文字、符号进行统一性编码。1991年美国跨国公司成立Unicode Consortium,并于1991年10月与WG2达成协议,采用同一编码...

    net学习笔记及其他代码应用

    答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的...

    java jdk8 学习笔记

    2.动态加载类别文档、字符串池(String Pool)等特性为节省内存而设计 3.jdk java development kit java 开发工具集 java se 平台包括jdk与java语言 ,(不知道编程语言是什么?可以这样想 :java 语言 ->类文件...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    JAVA学习笔记第十四天

    JAVA学习笔记第十四天——字符集编码解码、泛型的使用、数据结构栈和链表、集合框架&List,示例代码,里面主要是知识点的具体使用和各种现象。

    html学习笔记.zip

    介绍了html中代码格式和常用标签 #HTML格式 * `<!DOCTYPE html>`---------*注明文件使用格式* ... `<head>`--------*头部* `<meta charset=UTF-8>`-------*设置字符集,一般都为UTF-8*

    《Html》前端学习笔记

    超文本标记语言,一个网页在不同的地方使用不同的标签去标记 一个网页的组成:HTML+CSS+JavaScript(JS、JQuery) ...CSS :层叠样式;...比如字符集(有 utf-8) ,标题 title <body>:是文档的主体,需要呈现的内容

    php学习笔记_心得

    1、在php文件中如果调用另一个php文件 2、php页面跳转的方法 3、PHP的异常处理 4、this,self,parent三个关键字之间的区别 5、Php与oracle数据库 6、环境变量设置 9、字符集转换

    go学习笔记

    Go 学习笔记, 第 4 版 4 4.4 Struct 47 第 5 章 ⽅方法 53 5.1 ⽅方法定义 53 5.2 匿名字段 54 5.3 ⽅方法集 56 5.4 表达式 56 第 6 章 接⼝口 60 6.1 接⼝口定义 60 6.2 执⾏行机制 62 6.3 接⼝口转换 63 6.4 接⼝...

    计算机网络学习笔记,包括TCP/IP每层的核心内容和知识点

    因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。一个很形象地比喻就是我们的语言,我们大天朝地广人多,地方性语言也非常丰富,而且方言之间差距巨大。A地区的方言...

    Awk学习笔记

    8. POSIX字符集 9. 匹配操作符(~) 10. 比较表达式 11. 范围模板 12. 一个验证passwd文件有效性的例子 13. 几个实例 14. awk编程 14.1. 变量 14.2. BEGIN模块 14.3. END模块 14.4. 重定向和管道 14.5. ...

    Tensorflow学习笔记 -Python 语法学习笔记一基本语法

    基础语法笔记一1.新建等基本命令3.运算符运算顺序,转义字符4.加减乘除运算5.列表6.元组 (我是用的是Linux的Ubuntu进行桌面应用开发) 1.新建等基本命令 1.√桌面点击右键 选择 Open Terminal 打开终端 √pwd 打印...

    html的个人学习笔记 html-css.html

    字符集 charset=""(GBK/UTF-8) <title>网页名称</title> <base target=""/>统一指定网页中所有的a标签网页打开方式 _self当前页面转变,_blank在新页面打开 --> <!-- 1.规定文字样式...

Global site tag (gtag.js) - Google Analytics