`
Duno
  • 浏览: 33150 次
  • 来自: ...
社区版块
存档分类
最新评论

编码格式

    博客分类:
  • web
阅读更多
1. ASCII

我们需要了解的最早编码是ASCII码。它用7个二进制位来表示,由于那个时期生产的大多数计算机使用8位大小的字节,因此用户不仅可以存放所有可能的 ASCII字符,而且有整整一位空余下来。如果你技艺高超,可以将该位用做自己离奇的目的:WordStar中那个发暗的灯泡实际上设置这个高位,以指示一个单词中的最后一个字母,同时这也宣示了WordStar只能用于英语文本。
  由于字节有多达8位的空间,因此许多人在想:“呀!我们可以把128~255之间的编码用做个人的应用目的。”问题在于,同时产生这种想法的人相当多,而且在128~255之间的各个位置上应该存放什么这一问题上,真是仁者见仁智者见智。事实上,只要人们开始在美国以外的地方购买计算机,那么各种各样的不同OEM字符集都会进入规划设计行列,并且各人都会根据自己的需要使用高位的128个字符。如此一来,甚至在同语种的文档之间就不容易实现互换。 ASCII可被扩展,最优秀的扩展方案是ISO8859-1,通常称之为Latin-1。Latin-1包括了足够的附加字符集来写基本的西欧语言。
最后,这个人人参与的OEM终于以ANSI标准的形式形成文件。在ANSI标准中,每个人都认同如何使用低端的128个编码,这与ASCII相当一致。不过,根据所在国籍的不同,处理编码128以上的字符有许多不同的方式。这些不同的系统称为代码页。
  同时,甚至更为令人头疼的事情正在逐步上演,亚洲国家的字符表有成千上万个字符,这样的字符表是用8位二进制无法表示的。该问题的解决通常有赖于称为DBCS(doublebyte character set,双字节字符集)的繁杂字符系统。
  不过,仍然需要指出一点,多数人还是姑且认为一个字节就是一个字符,以及一个字符就是8个二进制位,并且只要确保不将字符串从一台计算机移植到另一台计算机,或者说一种以上的语言,那么这几乎总是可以凑合。当然,只要一进入Internet,从一台计算机向另一台计算机移植字符串就成为家常便饭了,而各种复杂状况也随之呈现出来。令人欣慰的是,Unicode随即问世了。

2.iso8859-1
属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母'a'的编码为0x61=97。
很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用 iso8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然"中文"两个字不存在iso8859-1编码,以gb2312编码为例,应该是"d6d0cec4"两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:"d6d0 cec4"(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节"e4b8 ad e6 96 87"。很明显,这种表示方法还需要以另一种编码为基础。

3.GB码

全称是GB2312-80《信息交换用汉字编码字符集基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。P-Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows95/98则以GBK为基本汉字编码、但兼容支持GB2312。
         双字节编码
         范围:A1A1~FEFE
         A1-A9:符号区,包含682个符号
         B0-F7:汉字区,包含6763个汉字

4.GB2312

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1- FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。GB2312-80中共收录了7545个字符,用两个字节编码一个字符。每个字符最高位为0。GB2312-80编码简称国标码。

  GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。

5.GB12345-90

1990年制定了繁体字的编码标准GB12345-90《信息交换用汉字编码字符集第一辅助集》,目的在于规范必须使用繁体字的各种场合,以及古籍整理等。该标准共收录6866个汉字(比GB2312多103个字,其它厂商的字库大多不包括这些字),纯繁体的字大概有2200余个。
         双字节编码
         范围:A1A1~FEFE
         A1-A9:符号区,增加竖排符号
         B0-F9:汉字区,包含6866个汉字

6.GBK

GBK编码(Chinese Internal CodeSpecification)是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准。gbk编码能够用来同时表示繁体字和简体字,而 gb2312只能表示简体字,gbk是兼容gb2312编码的。GBK工作小组于1995年10月,同年12月完成GBK规范。该编码标准兼容 GB2312,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。Windows95/98简体中文版的字库表层编码就采用的是GBK,通过GBK与UCS之间一一对应的码表与底层字库联系。
       英文名:ChineseInternal Code Specification
       中文名:汉字内码扩展规范1.0版
       双字节编码,GB2312-80的扩充,在码位上和GB2312-80兼容
       范围:8140~FEFE(剔除xx7F)共23940个码位
包含21003个汉字,包含了ISO/IEC10646-1中的全部中日韩汉字

7.BIG5编码
是目前台湾、香港地区普遍使用的一种繁体汉字的编码标准,包括440个符号,一级汉字5401个、二级汉字7652个,共计13060个汉字。BIG5又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏碁(Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大众(FIC)创立,故称大五码。Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、IBMPS55、王安码等,彼此不能兼容;另一方面,台湾政府当时尚未推出官方的汉字编码,而中国大陆的GB2312编码亦未有收录繁体中文字。

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

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

尽管Big5码内包含一万多个字符,但是没有考虑社会上流通的人名、地名用字、方言用字、化学及生物科等用字,没有包含日文平假名及片假字母。

例如台湾视“着”为“著”的异体字,故没有收录“着”字。康熙字典中的一些部首用字(如“亠”、“疒”、“辵”、“癶”等)、常见的人名用字(如“堃”、“煊”、“栢”、“喆”等)也没有收录到Big5之中。


8.UTF-8
UTF:UCSTransformationFormat.考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。
注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。

UTF8编码后的大小是不一定,例如一个英文字母"a"和 一个汉字"好",编码后占用的空间大小就不样了,前者是一个字节,后者是三个字节!编码的方法是从低位到高位。黄色为标志位其它着色为了显示其,编码后的位置。

9.Unicode

Unicode字符集(简称为UCS),国际标准组织于1984年4月成立ISO/IECJTC1/SC2/WG2工作组,针对各国文字、符号进行统一性编码。1991年美国跨国公司成立UnicodeConsortium,并于1991年10月与WG2达成协议,采用同一编码字集。目前Unicode是采用16位编码体系,其字符集内容与ISO10646的BMP(BasicMultilingual Plane)相同。Unicode于1992年6月通过DIS(DrafInternationalStandard),目前版本V2.0于1996公布,内容包含符号6811个,汉字20902个,韩文拼音11172个,造字区6400个,保留20249个,共计65534个。Unicode编码后的大小是一样的.例如一个英文字母"a" 和 一个汉字"好",编码后都是占用的空间大小是一样的,都是两个字节!
Unicode可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容iso8859-1编码的,也不兼容任何编码。不过,相对于iso8859-1编码来说,uniocode编码只是在前面增加了一个0字节,比如字母'a'为"0061"。
需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而unicode又可以用来表示所有字符,所以在很多软件内部是使用unicode编码来处理的,比如java。
1.国家标准汉字代码体系
   汉字字数繁多,属性丰富,因而汉字代码体系也较复杂,包括:
   (1)汉字机内码。它们是汉字在计算机汉字系统内部的表示方法,是计算机汉字系统的基础代码。
   (2)汉字交换码。它们是国标汉字(如机内码)进行信息交换的代码标准。
   (3)汉字输入码。它们是在计算机标准键盘上输入汉字用到的各种代码体系。
   (4)汉字点阵码。它们是在计算机屏幕上显示和在打印机上打印输出汉字的代码体系。
   (5)汉字字形控制码。为了打印各种风格的字体和字形所制定的代码。
   这些代码系统有的必须有统一的国家标准,有的则不要求统一。近年来我国已经制定系列汉字信息处理方面的国家标准,今后将继续完善,并与国际上求得统一。

2. 国家标准汉字交换码
   我国制定了“中华人民共和国国家标准信息交换汉字编码”,标准代号为GB2312—80,这种编码又称为国标码。在国标码的字符集中共收录了一级汉字3755个,二级汉字3008个,图形符号682个,三项字符总计7445个。
   在国标GD2312—80中规定,所有的国标汉字及符号分配在一个94行、94列的方阵中,方阵的每一行称为一个“区”,编号为01区到94区,每一列称为一个“位”,编号为01位到94位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。区位码的前两位是它的区号,后两位是它的位号。用区位码就可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一的区位码。汉字“母”字的区位码是3624,表明它在方阵的36区24位,问号“?”的区位码为0331,则它在03区3l位。
   所有的汉字和符号所在的区分为以下四个组:
(1)01区到15区。图形符号区,其中01区到09区为标准符号区,10区到15区为自定义符号区。
   01区到09区的具体内容如下;
   1)01区。一般符号202个,如间隔符、标点、运算符、单位符号及制表符;
   2)02区。序号60个,如1.~20.、(1)~(20)、①~⑩及(一)~(十);
   3)03区。数字22个,如0—9及X一XII,英文字母52个,其中大写A—Z、小写a—z各26个;
   4)04区。日文平假名83个;
   5)05区。日文片假名86个;
   6)06区。希腊字母48个;
   7)07区。俄文字母66个;
  08区。汉语拼音符号a—z26个;
   9)09区。汉语拼音字母37个。
(2)16区到55区。一级常用汉字区,包括了3755个一统汉字。这40个区中的汉字是按汉语拼音排序的,同音字按笔划顺序排序。其中55区的90一94位未定义汉字。
(3)56区到87区。二级汉字区,包括了3008个二级汉字,按部首排序。
(4)88区到94区。自定义汉字区。
第10区到第15区的自定义符号区和第88区到第94区的自定义汉字区可由用户自行定义国标码中未定义的符号和汉字。

3. 国家标准汉字机内码
汉字的机内码是指在计算机中表示一个汉字的编码。机内码与区位码稍有区别。如上所述,汉字区位码的区码和位码的取值均在1~94之间,如直接用区位码作为机内码,就会与基本ASCII码混淆。为了避免机内码与基本ASCII码的冲突,需要避开基本ASCII码中的控制码(00H~1FH),还需与基本 ASCII码中的字符相区别。为了实现这两点,可以先在区码和位码分别加上20H,在此基础上再加80H(此处“H”表示前两位数字为十六进制数)。经过这些处理,用机内码表示一个汉字需要占两个字节,分别   称为高位字节和低位字节,这两位字节的机内码按如下规则表示:
高位字节=区码+20H+80H(或区码+A0H)
低位字节=位码+20H+80H(或位码+AOH)
由于汉字的区码与位码的取值范围的十六进制数均为01H~5EH(即十进制的01~94),   所以汉字的高位字节与低位字节的取值范围则为A1H~FEH(即十进制的161~254)。
例如,汉字“啊”的区位码为1601,区码和位码分别用十六进制表示即为1001H,它的机内码的高位字节为B0H,低位字节为A1H,机内码就是B0A1H。 

4. 汉字的输入码
在计算机标准键盘上,汉字的输入和西文的输入有很大的不同。西文的输入,击一次键就直接输入了相应的字符或代码,“键入”和“输入”是同一个含义。但是在计算机上进行汉字输入时,“键入”是指击键的动作即键盘操作的过程,而“输入”则是把所需的汉字或字符送到指定的地方,是键盘操作的目的。目前已有多种汉字输入方法,因此就有多种汉字输入码。汉字输入码是面向输入者的,使用不同的输入码其操作过程不同,但是得到的结果是一样的。不管采用何种输入方法,所有输入的汉字都以机内码的形式存储在介质中,而在进行汉字传输时,又都以交换码的形式发送和接收。
国标GB2312—80规定的区位码和沿用多年的电报码都可以作为输入码。这类汉字编码和输入码是一一对应的,具有标准的性质,它们编码用的字符是10个阿拉伯数字,每个汉字的码长均为等长的四个数码。
其他编码的种类很多,可从以下几点加以讨论:
(2)编码类型。可分为拼音码、字形码、音形结合码等类型。
(2)编码规则。不同的编码方案有很大的不同,有的规则简单,学习起来较容易记忆,‘有的规则复杂,较难记亿。
(3)编码字符集。有用字母键的,有用数字键的,有用字母键加数字键的,或者用了更多的键作编码字符集的。
(4)编码长度。它与编码字符集的大小有关,字符集越大,编码长度越短。采用26   个字母的编码,其码长一般为四位。
(5)对应关系。除上面提到的区位码和电报码为一一对应的无重码编码外,其他现有的编码方案均有一定数量的重码。所谓重码即一码对应多字。有许多编码为了增加输入的灵活性,同一汉字用多个码来对应,例如双音编码。
(6)单宁和词汇的编码。现有的编码方案,为了提高效率,除了单字外还规定了词汇的编码,甚至使用者可以自行增加词汇库中的词汇,但在提高效率的同时也增加了记亿和操作的复杂性。
(7)码表的类型和大小。从汉字输入码到机内码的转换一股需要在机内检索码表。如果输入码和机内码存在简单的函数关系,有公式可以计算,如区位码等编码就不需要码表,其他没有简单函数关系的编码就需要码表。码表大小与数据结构、单字数量、词汇数量等因素有关。国标血2312—80规定的6763个一、二级汉字,备类编码的码表从几千字节到几万字节。随着词汇旦的增加,有的码表达到了若干兆字节。

5. 汉字的点阵码
汉字的显示和输出,普遍采用点阵方法。由于汉字数量多且字形变化大,对不同字形汉字的输出,就有不同的点阵字形。所谓汉字的点阵码,就是汉字点阵字形的代码。存储在介质中的全部汉字的点阵码又称为字库。 .
   16x16点阵的汉字其点阵有16行,每一行上有16个点。如果每一个点用一个二进制位来表示,则每一行有16个二进制位,需用两个字节来存放每一行上的 16个点,并且规定其点阵中二进制位0为白点,1为黑点,这样一个16X16点阵的汉字需要用2×t6即32个字节来存放。依次类推,24×24点阵和 32×32点阵的汉字则依次要用72个字节和128个字节存放一个汉字,构成它在字库中的字模信息。
要显示或打印输出一个汉字时,计算机汉字系统根据该汉字的机内码找出其字模信息在字库中的位置,再取出其字模信息作为字形在屏幕上显示或在打印机上打印输出。
分享到:
评论

相关推荐

    修改Ubuntu中文编码格式

    由于两个系统默认使用的编码格式不同,通常情况下Windows中文版默认使用GBK编码,而Ubuntu在支持中文之后,默认使用的是UTF-8编码。如果不进行编码格式的调整,就可能出现文件中文乱码的情况。因此,如何将Ubuntu中...

    编码格式查看工具 编码格式查看工具

    编码格式查看工具: AVIcodec 解码器 及其他所有格式 光是看扩展名是无法知道影片的正确的编码格式的,特别像 DivX 这样的高品质、高压缩比的影片格式出现后。除了原本未压缩的 AVI 影片外,目前使用这样的扩展名...

    RFID数据传输常用编码格式

    RFID数据传输常用编码格式 在RFID系统中,数据传输的可靠性非常重要,而数据传输的可靠性取决于编码格式的选择。常用的RFID数据传输编码格式有六种:反向不归零(NRZ)编码、曼彻斯特(Manchester)编码、单极性...

    获取zip文件编码格式 cpdetector.zip

    在IT行业中,处理文本文件时,经常会遇到不同的字符编码格式,如UTF-8、GBK、ISO-8859-1等。不同的编码格式决定了文本中的字符如何在计算机内存中存储和显示。当需要处理未知编码格式的文件,尤其是ZIP压缩文件时,...

    JAVA获取文件编码格式

    在Java开发过程中,有时我们需要确定一个文件的编码格式,以便正确地读取和处理其中的数据。标题提到的“JAVA获取文件编码格式”是一项常见的任务,特别是在处理来自不同来源的文本文件时。在这种情况下,我们可以...

    C# 编码自动识别 匹配文件当前编码格式

    在编程领域,尤其是在处理文本文件时,正确识别和使用文件的编码格式至关重要。C#作为.NET框架中的主要编程语言,提供了强大的支持来处理各种编码格式。本文将详细讲解"C#编码自动识别匹配文件当前编码格式"这一主题...

    常见视频编码格式详细介绍

    ### 常见视频编码格式详细介绍 #### 一、视频文件分类 视频文件根据其特点和用途大致可以分为两大类:影像文件和流式视频文件。 1. **影像格式**:这类文件通常用于存储视频和音频信息,适用于本地播放。常见的...

    获取编码格式的工具类

    在IT行业中,编码格式是处理文本数据时至关重要的一个环节,因为不同的编码方式会影响字符的表示和解析。本文将详细探讨“获取编码格式的工具类”这一主题,它旨在帮助开发者处理不同编码格式的文本文件,如UTF-8和...

    判断字符编码格式代码

    根据给定文件的信息,我们可以总结出以下关于“判断字符编码格式代码”的相关知识点: ### 一、背景介绍 在计算机科学领域,字符编码是将文本转换为数字表示的方法,以便于计算机存储和处理。常见的字符编码包括...

    eclipse 里设置文件的默认编码格式

    在IT行业中,开发人员经常需要处理各种编码格式,特别是在使用集成开发环境(IDE)如Eclipse时。Eclipse是一款强大的Java开发工具,但它也支持多种编程语言,因此正确配置文件的编码格式至关重要,以避免乱码问题。...

    文件编码格式批量修改工具

    在IT领域,文件编码格式是数据存储和传输中不可或缺的一部分,尤其在处理多语言或跨平台的项目时显得尤为重要。本文将深入探讨“文件编码格式批量修改工具”,它是一款专为Windows用户设计的实用程序,旨在帮助用户...

    Java判断文件编码格式 - 明明是悟空 - 博客园1

    在Java编程中,判断文件编码格式是一项常见的任务,特别是在处理包含多国语言或者用户自定义内容的文件时。本文将探讨如何使用Java进行文件编码格式的识别,主要介绍两种方法:一种是简单的UTF-8判断,另一种是使用...

    Python 查看文件的编码格式方法

    ### Python 查看文件的编码格式方法 在处理文本文件时,了解文件的编码格式是非常重要的。这不仅能帮助我们正确地读取文件内容,还能避免因编码不匹配导致的数据损坏或乱码问题。本文将详细介绍如何使用Python来...

    常用的几种编码格式

    根据提供的文件信息,可以看出这些内容涉及到了不同的编辑器、数据查询工具及操作,但与“常用的几种编码格式”这一主题关系不大。为了更好地满足需求,本文将围绕“常用的几种编码格式”这一主题展开讨论。 ### ...

    VC/C++ 字符编码格式转换

    在VC/C++环境中,常见的编码格式有ANSI、UTF-8和Unicode。这些编码各有其特点,适用于不同的场景。本篇文章将深入探讨如何在VC/C++中利用API函数`WideCharToMultiByte`和`MultiByteToWideChar`进行不同编码格式之间...

    获取文件编码格式(纯JAVA代码,绝对对你有用)

    java 识别文件的编码格式 读取文件的编码 utf-8 gbk gb2312 java 编码 java 获取文件编码格式 java 乱码查找

    获取文件编码格式与文件转码

    在IT行业中,尤其是在Android开发中,处理文件编码格式与文件转码是常见的任务。编码格式决定了文本文件中字符的表示方式,不同的编码如ASCII、UTF-8、GBK等有着不同的规则。了解并能够正确处理文件编码对于确保程序...

    红外编码格式-philips rc6

    红外编码格式:Philips RC-6深度解析 Philips RC-6是红外编码技术中的一个高级版本,作为RC-5的后继者,它由飞利浦定义并推广,广泛应用于遥控器、家用电器和多媒体设备中。RC-6协议以其高度的灵活性和详尽的规范...

    编码格式转换工具

    在IT领域,编码格式转换工具是一种非常实用的软件,它能够帮助用户在不同的字符编码之间进行转换,以解决数据交换、文本处理或程序开发中遇到的兼容性问题。本文将详细探讨编码格式转换的重要性和其在实际应用中的...

    Java工程编码格式由GBK转化成utf-8(编码格式互转)

    Java工程编码格式由GBK转化成utf-8(编码格式互转) https://ymjin.blog.csdn.net/article/details/118769530

Global site tag (gtag.js) - Google Analytics