`
cuixuxucui
  • 浏览: 351753 次
  • 性别: 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 类型)类型 进行字符运算。

分享到:
评论

相关推荐

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    Go语言学习笔记.pdf 共174页

    Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分:Go语言基础、标准库和扩展库...

    h5前端学习笔记

    【描述】"我的h5前端学习笔记"表明这是一份个人的学习记录,可能包含了作者在探索HTML5前端开发过程中对各个方面的理解和实践总结。学习笔记通常包括了基础概念、关键特性、实用技巧以及常见问题的解决方法。 ...

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

    这份"Python学习笔记"涵盖了从环境搭建到基础语法,再到数据类型和控制结构等关键知识点,旨在为初学者提供全面的学习指导。 首先,1.1章节介绍了Python的基础,包括Python的起源和历史。Python是由Guido van ...

    JAVA 字符串应用笔记

    Java默认使用平台的默认字符集,但应尽量明确指定如`getBytes("UTF-8")`。 以上内容是基于"JAVA 字符串应用笔记"可能涵盖的基本知识点,对于初学者来说,理解和掌握这些概念是进阶学习Java和Android开发的基础。在...

    C#6.0学习笔记 从第一行C#代码到第一个项目设计周家安著

    《C# 6.0学习笔记:从第一行C#代码到第一个项目设计》是由周家安编著的一本深入浅出的C#编程教程。这本书主要针对C#初学者和有一定基础的开发者,旨在帮助读者全面理解C# 6.0版本的新特性和编程技巧,并通过实际项目...

    超详细ES6变动,ES6学习笔记,JavaScriptES6学习笔记

    本学习笔记将聚焦于与ES5的区别,帮助初学者快速掌握ES6的核心概念。** 1. **变量声明:let和const** - `let`替代了`var`进行块级作用域的变量声明,解决了`var`的变量提升和函数作用域问题。 - `const`用于声明...

    iReport 3.6.7 学习笔记

    《iReport 3.6.7 学习笔记》 在IT行业中,报表设计和生成是数据可视化的重要环节,而iReport作为一款强大的Java报告工具,因其易用性和灵活性深受开发者喜爱。本学习笔记主要围绕iReport 3.6.7版本展开,探讨其核心...

    Oracle学习笔记 PDF

    ### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...

    Go语言学习笔记

    在学习笔记的附录部分,编者还添加了对Go工具集的介绍,比如条件编译、跨平台编译、调试工具GDB的使用,以及Go测试相关知识,包括单元测试、数据竞争测试、基准测试和代码覆盖率测试。 总的来说,Go语言学习笔记...

    php框架学习笔记.doc

    PHP框架学习笔记 PHP框架学习笔记是学习PHP框架的重要笔记,涵盖了CI...CI框架学习笔记涵盖了CI框架的基础知识点,包括控制器、模型、视图、URI路由、数据库操作、表单提交、上传文件、Session管理等方面的知识点。

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

    本次笔记是关于Python语言基础知识中的数据类型和字符串操作,这是学习机器学习和数据科学的入门要点。 首先,Python的基本数据类型包括整型(int)、浮点型(float)、布尔型(bool)以及复数类型(complex),...

    Visual C#学习笔记光盘

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

    C语言学习笔记.zip

    本压缩包“C语言学习笔记.zip”包含了丰富的C语言学习资料,主要集中在“c-notes-master”这个子目录下,适合初学者和有一定基础的程序员进行深入学习。 在C语言的学习中,首先要掌握的基本概念包括变量、数据类型...

    oracle 个人学习笔记

    以下是对Oracle数据库一些基础知识的详细解释,主要基于提供的个人学习笔记内容。 **第一节:数据库管理** 1. **创建用户**:`CREATE USER`命令用于创建新的数据库用户,如`CREATE USER username IDENTIFIED BY ...

    算法学习笔记.pdf

    在本篇算法学习笔记中,对一系列重要且常用的算法进行了整理和总结,以下是对文档内容中提及的知识点的详细解读。 一、快速排序算法 快速排序是一种高效的排序算法,采用分治法策略,它的时间复杂度平均为O(nlogn)...

    Ora12c学习笔记.docx

    Oracle 12c 学习笔记 本文档旨在为读者提供 Oracle 12c 的基础知识,涵盖 Oracle 的基本介绍、存储的介绍、基本数据对象、表空间的管理、升级到 Oracle 12c 以及数据库的物理布局和存储管理等方面。 Oracle 体系...

    C#学习笔记-函数方法集

    ### C#学习笔记—函数方法集 在C#编程中,掌握各种内置函数和方法对于提高编程效率至关重要。本文档汇总了C#中常用的函数和方法,并通过具体示例进行说明,帮助读者更好地理解和运用这些功能。 #### 一、DateTime...

    字符设备驱动学习笔记(2.6.23)

    这篇“字符设备驱动学习笔记(2.6.23)”文档针对的是Linux内核版本2.6.23,这可能是2007年的内核版本,当时Linux系统已经相当成熟,但相对于最新的内核版本,它可能不包含一些新特性或优化。 学习Linux字符设备驱动...

    超详细的MySQL学习笔记

    在MySQL的安装方面,笔记提醒使用者注意端口号选择默认的3306以及字符集选择UTF-8,这是因为UTF-8的字符集具有较好的兼容性和广泛支持多语言的特点。 笔记中还涵盖了什么是SQL,以及SQL规范的一些基本要求。SQL是一...

Global site tag (gtag.js) - Google Analytics