`

字符集与字符编码的基础知识

阅读更多

字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、ISO 8859字符集、GB2312字符集、BIG5字符集、 GB 18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。

编码(Encoding)和字符集不同。字符集只是字符的集合,不一定适合作网络传送、处理,有时须经编码(Encode)后才能应用。如Unicode可依不同需要以UTF-8、UTF-16、UTF-32等方法编码。

因此,对字符进行编码,是信息交流的技术基础。本文将按照字符集的时间顺序讨论几种典型的字符集,选取几种代表性的字符集,研究历史由来、特点、技术特征。

ASCII 字符集

1.名称的由来

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于罗马字母表的一套电脑编码系统。

2.特点

它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646。

3.包含内容

控制字符:回车键、退格、换行键等。

可显示字符:英文大小写字符、阿拉伯数字和西文符号

4.技术特征

7位(bits)表示一个字符,共128字符

5.ASCII扩展字符集

7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。ASCII扩展字符集比ASCII字符集扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。

ISO 8859

1. 名称的由来

ISO 8859,全称ISO/IEC 8859,是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定的一

系列8位字符集的标准,现时定义了15个字符集。

2. 特点

ASCII收录了空格及94个“可印刷字符”,足以给英语使用。但是,其他使用拉丁字母的语言(

主要是欧洲国家的语言),都有一定数量的重音字母,故可以使用ASCII及控制字符以外的区域

来储存及表示。

3.包含内容

除了使用拉丁字母的语言外,使用西里尔字母的东欧语言、希腊语、泰语、现代阿拉伯语、希

伯来语等,都可以使用这个形式来储存及表示。

各种ISO 8859字符集
• ISO 8859-1 (Latin-1) - 西欧语言
• ISO 8859-2 (Latin-2) - 中欧语言
• ISO 8859-3 (Latin-3) - 南欧语言。世界语也可用此字符集显示。
• ISO 8859-4 (Latin-4) - 北欧语言
• ISO 8859-5 (Cyrillic) - 斯拉夫语言
• ISO 8859-6 (Arabic) - 阿拉伯语
• ISO 8859-7 (Greek) - 希腊语
• ISO 8859-8 (Hebrew) - 希伯来语(视觉顺序)
• ISO 8859-8-I - 希伯来语(逻辑顺序)
• ISO 8859-9 (Latin-5 或 Turkish) - 它把Latin-1的冰岛语字母换走,加入土耳其

语字母。
• ISO 8859-10 (Latin-6 或 Nordic) - 北日耳曼语族,用来代替Latin-4。
• ISO 8859-11 (Thai) - 泰语,从泰国的TIS620标准字集演化而来。
• ISO 8859-13 (Latin-7 或 Baltic Rim) - 波罗的海语族
• ISO 8859-14 (Latin-8 或 Celtic) - 塞尔特语族
• ISO 8859-15 (Latin-9) - 西欧语言,加入Latin-1欠缺的法语及芬兰语重音字母,以及欧元(这个符号传不出来,这个bbs的bug吧,:))符号。
• ISO 8859-16 (Latin-10) - 东南欧语言。主要供罗马尼亚语使用,并加入欧元符号。

由于英语没有任何重音字母(不计外来字),故可使用以上十五个字集中的任何一个来表示。至于德语方面,因它除了 A-Z, a-z 外,只用 Ä, Ö, Ü, ä, ö, ß, ü 七个字母,而所有拉丁字集(1-4, 9-10, 13-16)均有此七个字母,故德语可使用以上十个字集中的任何一个来表示。此系列中没有-12号的原因是,此计划原本要设计成一个包含塞尔特语族字符集的“Latin-7”,但后来塞尔特语族变成了ISO 8859-14 / Latin-8。亦有一说谓-12号本来是预留给印度天城体梵文的,但后来却搁置了。

GB2312 字符集

1.名称的由来

GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集•基本集》,由原中国国家标准总局发布,1981年5月1日实施。

2.特点

GB2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。

3.包含内容

GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。其中包括6763个汉字,其中一级汉字3755个,二级汉字3008个;包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

4.技术特征

(1)分区表示:

GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。

各区包含的字符如下:01-09区为特殊符号;16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序;10-15区及88-94区则未有编码。

(2)双字节表示

两个字节中前面的字节为第一字节,后面的字节为第二字节。习惯上称第一字节为“高字节” ,而称第二字节为“低字节”。“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。

5.编码举例

以GB2312字符集的第一个汉字“啊”字为例,它的区号16,位号01,则区位码是1601,在大多数计算机程序中,高字节和低字节分别加0xA0得到程序的汉字处理编码0xB0A1。计算公式是:
0xB0=0xA0+16, 0xA1=0xA0+1。

BIG5 字符集

1.名称的由来

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

2.特点

Big5字符集共收录13,053个中文字,该字符集在中国台湾使用。耐人寻味的是该字符集重复地收录了两个相同的字:“兀”(0xA461及0xC94A)、“嗀”(0xDCD1及0xDDFC)。

3.字符编码方法

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

各编码范围对应的字符类型如下:0xA140-0xA3BF为标点符号、希腊字母及特殊符号,另外于0xA259-0xA261,存放了双音节度量衡单位用字:兙兛兞兝兡兣嗧瓩糎;0xA440-0xC67E为常用汉字,先按笔划再按部首排序;0xC940-0xF9D5为次常用汉字,亦是先按笔划再按部首排序。

4.Big5 的局限性

尽管Big5码内包含一万多个字符,但是没有考虑社会上流通的人名、地名用字、方言用字、化学及生物科等用字,没有包含日文平假名及片假名字母。例如台湾视“着”为“著”的异体字,故没有收录“着”字。康熙字典中的一些部首用字(如“亠”、“疒”、“辵”、“癶”等)、常见的人名用字(如“堃”、“煊”、“栢”、“喆”等) 也没有收录到Big5之中。

GB18030 字符集

1.名称的由来

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

2.特点

GB 18030字符集标准的出台经过广泛参与和论证,来自国内外知名信息技术行业的公司,信息产业部和原国家质量技术监督局联合实施。
GB 18030字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。并且与Unicode 3.0版本兼容,填补Unicode扩展字符字汇“统一汉字扩展A”的内容。并且与以前的国家字符编码标准(GB2312,GB13000.1)兼容。

3.编码方法

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。

4.包含的内容

双字节部分收录内容主要包括GB13000.1全部CJK汉字20902个、有关标点符号、表意文字描述符13个、增补的汉字和部首/构件80个、双字节编码的欧元符号等。  四字节部分收录了上述双字节字符之外的,包括CJK统一汉字扩充A在内的GB 13000.1中的全部字符。

Unicode字符集

1.名称的由来

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

2.特征

Unicode是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

3.编码方法

Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,例如字母“A”的编码为 0041 和字符“欧元符号”的编码书写为“U+20AC”。

4.UTF-8 编码
UTF-8是Unicode的其中一个使用方式。 UTF是 Unicode Translation Format,即把Unicode转做某种格式的意思。
UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。

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

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

分享到:
评论

相关推荐

    java字符集基础知识及问题

    本文主要介绍字符集编码基本知识,系统的介绍了字符集各种类型。 字符集常见问题和解决方案。

    中文编码基础知识介绍

    该书详细介绍了GB2312、GBK、BIG5、GB18030、UTF_8字符集等编码,为编码初学者提供了详细信息。

    C语言基础之转义字符:从原理到应用的字符编码教程 .txt

    本资源利用多个实例,如打印文件路径、输出控制字符、显示特殊字符等,展示了C语言转义字符的用法和作用,以及相关的概念和知识,如ASCII码、字符集、字符串等。本资源适合C语言教学和学习的教师和学生使用,帮助...

    字符集基础知识(描述解决java乱码问题的最详细的资料)

    以“中文”二字为例,详细的介绍了从java源文件,jsp页面到class文件,以及在web容器中编码解码的详细的具体的过程,只要深刻理解这篇文章,所有java乱码问题都将轻松解决。

    UNICODE 基础知识.pdf

    UNICODE 基础知识 Unicode.org 是一个国际性的组织,致力于使全球各种语言文字在计算机上使用统一的 编码。经过多年的发展,UNICODE 编码已经发展到了4.1 的版本。 1. 编码范围 早期的UNICODE 版本里,认为UNICODE ...

    JSPServlet 中 字符编码问题

    其实 JSP/Servlet 的中文encoding 并没有想像的那么复杂,虽然定位和解决问题没有定规,...了解字符集的知识是解决字符问题的基础。不过,随着中文字符集的变化,不仅仅是 java 编程,中文信息处理中的问题还是会存在一

    哈夫曼编码-数据结构-C++程序.doc

    数据结构课程设计 一、目的 《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理 论知识的同时,加强上机实践。本课程设计的目的就是要达到理论与实际应用相结合, 使同学们能够根据数据...

    JavaSE知识内容.xmind

    菜单栏--------->编码--------->编码字符集-------->中文------------->GB2312(中文的字符编码)。 如果每次更改字符集麻烦:菜单栏--------->设置---------->首选项--------->新建--------->右侧编码选择GB2312

    Java程序设计基础:字符数据类型.pptx

    字符内部Unicode字符编码,占2个字节,可表示0~216-1(65535)个字符,通常用一对单引号引用,如:‘a’,‘5’等。 字符数据类型(char) ASCII 码是 Unicode 码的一个子集,用 Unicode 表示 ASCII 码时,可表示其前...

    mysql基本操作和练习手册.pdf

    二 基础知识: 1.数据库的连接 2:库级知识 3: 表级操作: 3.1 显示库下面的表 3.2 查看表的结构: 3.3 查看表的创建过程: 3.4 创建表: 3.5 修改表 4:列类型讲解 整型: 参数解释: 数值型 字符型 日期时间类型 5:增删改查...

    中职计算机应用基础习题集与答案.docx

    第一部分 理论练习题 计算机基础知识 一、填空题 1.目前普遍使用的微型计算机属于第代计算机,其元件采用了电路技术。 2.计算机系统包括系统及系统。 3.通常可把软件分成两大类,即和。 4.CPU是指,CAD是指。 5...

    哈夫曼编写编译码

    《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法...

    PHP 与 UTF-8 的最佳实践详细介绍

    《PHP中的字符串、编码、UTF-8》一文中描述了一些列的基础知识,比较枯燥,现在来说点有用的——PHP 字符串处理的最佳实践,本文是“PHP、字符串、编码、UTF-8”相关知识的第二部分。先说结论—— 在 PHP 中的各个...

    MySQL乱码问题终极指南

    关于字符集和乱码的基础知识这里就不详细说明了(请自行搜索),但有一个问题需要特别强调一下:乱码是怎么产生的? 这个问题相信很多同学都是模棱两可,或者没有认真想过,反正理解就是”字符编码“不对导致乱码,...

    计算机基础知识.doc

    通常是按计算机中硬件所采用的电子逻辑器件划分成电子管、晶体管、中小规模集 成电路、大规模超大规模集成电路四个阶段; 也有一种观点把计算机的发展大致分为四个时期,即大型机时期、小型机时期、 PC 时期(或...

    计算机应用基础知识.doc

    通常是按计算机中硬件所采用的电子逻辑器件划分成电子管、晶体管、中小规模集 成电路、大规模超大规模集成电路四个阶段; 也有一种观点把计算机的开展大致分为四个时期,即大型机时期、小型机时期、 PC 时期〔或...

    理解JavaScript表单的基础知识

    acceptCharset:服务器能够处理的字符集,等价于HTML的accept-charset特性 action:接收请求的URL,等价于HTML中的action特性。 elements:表单中所有控件的集合(HTMLCollection) enctype:请求的编码类型 ...

    中职计算机应用基础习题集及答案.doc

    第一部分 理论练习题 计算机基础知识 一、填空题 1.目前普遍使用的微型计算机属于第 代计算机,其元件采用了 电路技术。 2.计算机系统包括 系统及 系统。 3.通常可把软件分成两大类,即 和 。 4.CPU是指 ,CAD是...

    mysql官方中文参考手册

    10.10.4. 南欧与中东字符集 10.10.5. 波罗的海字符集 10.10.6. 西里尔字符集 10.10.7. 亚洲字符集 11. 列类型 11.1. 列类型概述 11.1.1. 数值类型概述 11.1.2. 日期和时间类型概述 11.1.3. 字符串类型概述 11.2. ...

Global site tag (gtag.js) - Google Analytics