字符编码及其由来

字符编码及其由来
字符编码及其由来

字符编码及由来

本文概述:本文从编码的发展历程开始,介绍了ASCII、ASCII扩展字符集、GB2312、GBK、GB18030和BIG5,以及统一编码规范之后的Unicode、UCS2、UCS4、UTF8、UTF16、UTF32、Little Endian和BigEndian。

(1)ANSI的“ASCII”编码(American Standard Code for Information Interchange,美国信息互换标准代码)0~127,用来存储空格、标点符号、数字、大小写字母。ASCII 中128~255称为扩展字符集。

(2)GB2312(对ASCII的中文扩展):

GB2312 收录简化汉字及符号、字母、日文假名等共7445 个图形字符,其中汉字占6763 个。

编码规定:

其编码范围为:2121H-777EH。一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(高字节)从0XA1用到0XFE,大约组合出7000多个简体汉字,其中包括数学符号、罗马希腊的字母和日本的假名。且ASCII 里原本有的数字、标点、字母都重新编了两个字节长的编码,这就是常说的“全角”,而原来在127一下的那些字符就叫“半角”字符。

GB2312 将代码表分为94 个区,对应第一字节;每个区94 个位,对应第二字节,两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。01-09 区为符号、数字区,16-87 区为汉字区,10-15 区、88-94 区是有待进一步标准化的空白区。GB2312 将收录的汉字分成两级:第一级是常用汉字计3755 个,置于16-55 区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008 个,置于56-87 区,按部首/笔画顺序排列。故而GB2312最多能表示6763 个汉字。

(3)GBK:

为满足所有汉字的需求,不再要求低字节一定是127号之后的内码,只要第一个字节大于127就固定表示这是一个汉字的开始。GBK包括了GB2312的所有的内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。

GBK 向下与GB2312 完全兼容,向上支持ISO 10646 国际标准。GBK 亦采用双字节表示,总体编码范围为8140-FEFE 之间,首字节在81-FE 之间,尾字节在40-FE 之间,剔除XX7F 一条线。

(4)GB18030:

GBK的扩展,增加了几千个新的少数民族的字。

以上统称为DBCS(Double Byte Character 双字节字符集)。在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此在程序中为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值大于127,则认为一个双字节字符集的字符出现了。

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 编码类似。现在的PC 平台必须支持GB18030,手机、MP3 一般只支持GB2312。

(5)BIG5:

BIG5 是通行于台湾、香港地区的一个繁体字编码方案。广泛应用于电脑行业,尤其是互联网中,从而成为一种事实上的行业标准。

BIG5 码是双字节编码方案,其中第一个字节的值在OXAO-OXFE 之间,第二个字节在OX40-OX7E 和OXA1-OXFE 之间。

(6)UniCode:

为了统一全世界的编码规范,ISO(国际标准化组织)废除所有地区性编码方案,重新制定一个了统一的编码——Universal Multiple_OctetCoded Character Set,简称UCS,俗称“UniCode”。

ISO规定,用16位统一表示所有的字符,对于ASCII里的那些“半角”字符,UNICODE 保持其原编码不变,只是将其长度由原来的8位扩展为16位,而其它文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位,所以其高8位永远是0,因此这种案在保存英文文本时会多浪费一倍的空间。

(7)UCS-2和UCS-4:

Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值,这个值称为代码点(code point)。代码点的值通常写成U+ABCD 的格式。而文字和代码点之间的对应关系就是UCS-2(Universal Character Set coded in 2 octets)。顾名思义,UCS-2是用两个字节来表示代码点,其取值范围为U+0000~U+FFFF。

为了能表示更多的文字,人们又提出了UCS-4,即用四个字节表示代码点。它的范围为U+00000000~U+7FFFFFFF,其中U+00000000~U+0000FFFF和UCS-2是一样的。

要注意,UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。规定存储方式的称为UTF(Unicode Transformation Format),其中应用较多的就是UTF-16和UTF-8了。

(8)UTF:

随着计算机网络的兴起,UNICODE 如何在网络上传输也是一个必须考虑的问题,于是面向传输的众多UTF(UCS Transfer Format)标准出现了,顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到UTF

时并不是直接的对应,而是要过一些算法和规则来转换。

在网络中交换数据时,对于数据高低位的解读方式,一些计算机是采用地位先发送的方法,如我们PC机采用的INTEL架构,而另一些是采用高位先发送的方式,为了核对双方对于高低位的认识是否一致,采用了一种很简便的方法,就是在文本流的开始时向对方发送一个标志符——如果之后的文本是高位在位,那就发送"FEFF",反之,则发送"FFFE"。

此外,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定二进制代码如何存储,于是出现了Unicode的多种存储方式,导致Unicode在很长一段时间内无法推广。UTF8就是在互联网上使用的最广的一种Unicode实现方式。其最大的特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节的长度。

UTF-16、UTF-32 和UTF8

(a)UTF-16

UTF-16由RFC2781规定,它使用两个字节来表示一个代码点。

不难猜到,UTF-16是完全对应于UCS-2的,即把UCS-2规定的代码点通过Big Endian 或Little Endian方式直接保存下来。UTF-16包括三种:UTF-16,UTF-16BE(Big Endian),UTF-16LE(Little Endian)。

UTF-16BE和UTF-16LE不难理解,而UTF-16就需要通过在文件开头以名为BOM(Byte Order Mark)的字符来表明文件是Big Endian还是Little Endian。BOM为U+FEFF这个字符。

由于UCS-2没有定义U+FFFE,因此只要出现FF FE 或者FE FF 这样的字节序列,就可以认为它是U+FEFF,并且可以判断出是Big Endian还是Little Endian。

例如,"ABC"这三个字符用各种方式编码后的结果如下:

UTF-16BE

00 41 00 42 00 43

UTF-16LE

41 00 42 00 43 00

UTF-16(Big Endian)

FE FF 00 41 00 42 00 43

UTF-16(Little Endian)

FF FE 41 00 42 00 43 00

UTF-16(不带BOM)

00 41 00 42 00 43

Windows平台下默认的Unicode编码为Little Endian的UTF-16(即上述的FF FE 41 00 42 00 43 00)。

(b)UTF-32

UTF-32用四个字节表示代码点,这样就可以完全表示UCS-4的所有代码点,相比UTF-16的表示方法更加简单。与UTF-16类似,UTF-32也包括UTF-32、UTF-32BE、UTF-32LE 三种编码,UTF-32也同样需要BOM字符。也用'ABC'举例:

UTF-32BE

00 00 00 41 00 00 00 42 00 00 00 43

UTF-32LE

41 00 00 00 42 00 00 00 43 00 00 00

UTF-32(Big Endian)

00 00 FE FF 00 00 00 41 00 00 00 42 00 00 00 43

UTF-32(Little Endian)

FF FE 00 00 41 00 00 00 42 00 00 00 43 00 00 00

UTF-32(不带BOM)

00 00 00 41 00 00 00 42 00 00 00 43

UTF-16和UTF-32的一个缺点就是它们固定使用两个或四个字节,这样在表示纯ASCII 文件时会有很多00字节,造成浪费。而RFC3629定义的UTF-8则解决了这个问题。

(c)UTF8的编码规则:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。其编码规则表:

U-00000000 - U-0000007F: 0xxxxxxx

U-00000080 - U-000007FF: 110xxxxx 10xxxxxx

U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx xxx 的位置由字符编码数的二进制表示的位填入,越靠右的x 具有越少的特殊意义,

只用最短的那个足够表达一个字符编码数的多字节串。注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目。而第一行中以0开头,是为了兼容ASCII编码,为一个字节,第二行就为双字节字符串,第三行为3字节,如汉字就属于这种,以此类推。

例如,将Unicode转换为UTF-8,在UTF-8中,如果一个字符的字节小于0x80(128)则为ASCII字符,占一个字节,可以不用转换,因为UTF-8兼容ASCII编码。假如在Unicode 中汉字“你”的编码为“u4F60”,把它转换为二进制为100111101100000,然后按照UTF-8的方法进行转换。可以将Unicode二进制从低位往高位取出二进制数字,每次取6位,如上述的二进制就可以分别取出为如下所示的格式,前面按格式填补,不足8位用0填补。

Unicode: 100111101100000 4F60

UTF8: 11100100,10111101,10100000 E4BDA0

从上面就可以很直观的看出Unicode到UTF-8之间的转换,当然知道了UTF-8的格式后,就可以进行逆运算,就是按照格式把它在二进制中的相应位置上取出,然后在转换就是所得到的Unicode字符了(这个运算可以通过“位移”来完成)。

如上述的“你”的转换,由于其值大于0x800小于0x10000,因此可以判断为三字节存储,则最高位需要向右移“12”位再根据三字节格式的最高位为11100000(0xE0)求或(|)就可以得到最高位的值了。同理第二位则是右移“6”位,则还剩下最高位和第二位的二进制值,可以通过与111111(0x3F)求按位于(&)操作,再和11000000(0x80)求或(|)。第三位就不用移位了,只要直接取最后六位(与111111(ox3F)取&),在与11000000(0x80)求或(|)。

当然在UTF-8到Unicode的转换也是通过移位等来完成的,就是把UTF-8那些格式相应的位置的二进制数给揪出来。在上述例子中“你”为三个字节,因此要每个字节进行处理,有高位到低位进行处理。在UTF-8中“你”为11100100,10111101,10100000。从高位起即第一个字节11100100就是把其中的"0100"给取出来,这个很简单只要和11111(0x1F)取与(&),由三字节可以得知最到位肯定位于12位之前,因为每次取六位。所以还要将得到的结果左移12位,最高位也就这样完成了0100,000000,000000。而第二位则是要把“111101”给取出来,则只需将第二字节10111101和111111(0x3F)取与(&)。在将所得到的结果左移6位与最高字节所得的结果取或(|),第二位就这样完成了,得到的结果为0100,111101,000000。以此类推最后一位直接与111111(0x3F)取与(&),再与前面所得的结果取或(|)即可得到结果0100,111101,100000。

(9)Little Endian和BigEndian:

Little Endian和BigEndian是表示计算机字节顺序的两种格式,所谓字节顺序是指长度跨越多个字节的数据的存放形式。

举个例子,从内存地址0x0000开始有以下数据

0x0000 0x12

0x0001 0x34

0x0002 0xab

0x0003 0xcd

如果我们去读取一个地址为0x0000的四个字节变量,若字节序为Big Endian,则读出结果为0x1234abcd;若字节序位Little Endian,则读出结果为0xcdab3412。

如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为

big-endian little-endian

0x0000 0x12 0xcd

0x0001 0x23 0xab

0x0002 0xab 0x34

0x0003 0xcd 0x12

需要特别说明的是,以上假设机器是每个内存单元以8位即一个字节为单位的。

简单的说,Little Endian把低字节存放在内存的低位;而Big Endian将低字节存放在内存的高位。

现在主流的CPU,intel系列的是采用的Little Endian的格式存放数据,而motorola系列的CPU采用的是Big Endian。

常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、...

ASCII ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。 只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。 GB2312 GB2312是基于区位码设计的,区位码把编码表分为94个区,每个区对应94个位,每个字符的区号和位号组合起来就是该汉字的区位码。区位码一般用10进制数来表示,如1601就表示16区1位,对应的字符是“啊”。在区位码的区号和位号上分别加上0xA0就得到了GB2312编码。 区位码中01-09区是符号、数字区,16-87区是汉字区,10-15和88-94是未定义的空白区。它将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。一级汉字是按照拼音排序的,这个就可以得到某个拼音在一级汉字区位中的范围,很多根据汉字可以得到拼音的程序就是根据这个原理编写的。 GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。可以用繁体汉字测试某些系统是不是只支持GB2312编码。 GB2312的编码范围是0xA1A1-0x7E7E,去掉未定义的区域之后可以理解为实际编码范围是0xA1A1-0xF7FE。 EUC-CN可以理解为GB2312的别名,和GB2312完全相同。 区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置,而GB2312及EUC-CN是实际计算机环境中支持这种字符集的编码。HZ和ISO- 2022-CN是对应区位码字符集的另外两种编码,都是用7位编码空间来支持汉字。区位码和GB2312编码的关系有点像Unicode和UTF-8。 GBK GBK编码是GB2312编码的超集,向下完全兼容GB2312,同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。同GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。GBK还收录了GB2312不包含的汉字部首符号、竖排标点符号等字符。 GBK的整体编码范围是为0x8140-0xFEFE,不包括低字节是0×7F的组合。高字节范围是0×81-0xFE,低字节范围是0x40-7E和0x80-0xFE。

字符编码方式介绍及编码方式测试

第一部分编码方式介绍 一、编码: 美国标准信息交换标准码( , ) 在计算机内部,所有地信息最终都表示为一个二进制地字符串.每一个二进制位()有和两种状态.一个字节()共由八个二进制位来组成,共有种状态,从到. 阿拉伯数字、英文字母、标点符号等这些字符,怎么定义才能让计算机识别呢?因为计算机只识别二进制位和,所以以上这些字符就必须与二进制位(和)建立关系,才能让计算机识别. 年代初,计算机界制定了一套统一地字符编码,来表示字符与二进制位之间地关系.这种统一地字符编码就叫做编码.码一共规定了个字符地编码,比如空格是(二进制),大写地字母是(二进制).这个符号(包括个不能打印出来地控制符号),只占用了一个字节地后面位,最前面地位统一规定为. 在英语国家,个编码足以表达所有字符,但其它非英语国家,字符不是由英文字符组成,这样就需要增加编码以表达这些字符,对于超过个字符地编码被称为非编码.比如:在中国,我们用简体中文,字符编码方式为.个人收集整理勿做商业用途 二、编码: 看到上面地介绍后,我们了解了最早编码是码.它只用个二进制位来表示,由于那个时期生产地大多数计算机使用位大小地字节,因此用户不仅可以存放所有可能地字符,而且有整整一位空余下来.如果你技艺高超,可以将该位用做自己离奇地目地:中那个发暗地灯泡实际上设置这个高位,以指示一个单词中地最后一个字母,同时这也宣示了只能用于英语文本. 由于字节有多达位地空间,因此许多人在想:“呀!我们可以把之间地编码用做个人地应用目地.”问题在于,同时产生这种想法地人相当多,而且在之间地各个位置上应该存放什么这一问题上,真是仁者见仁智者见智.事实上,只要人们开始在美国以外地地方购买计算机,那么各种各样地不同字符集都会进入规划设计行列,并且各人都会根据自己地需要使用高位地个字符.如此一来,甚至在同语种地文档之间就不容易实现互换. 可被扩展,最优秀地扩展方案是,通常称之为.包括了足够地附加字符集来写基本地西欧语言. 最后,这个人参与地终于以标准地形式形成文件.在标准中,每个人都认同如何使用低端地个编码,这与相当一致.不过,根据所在国籍地不同,处理编码以上地字符有许多不同地方式.这些不同地系统称为代码页. 同时,甚至更为令人头疼地事情正在逐步上演,亚洲国家地字符表有成千上万个字符,这样地字符表是用位二进制无法表示地.该问题地解决通常有赖于称为(,双字节字符集)地繁杂字符系统. 不过,仍然需要指出一点,多数人还是姑且认为一个字节就是一个字符,以及一个字符就是个二进制位,并且只要确保不将字符串从一台计算机移植到另一台计算机,或者说一种以上地语言,那么这几乎总是可以凑合.当然,只要一进入,从一台计算机向另一台计算机移植字符串就成为家常便饭了,而各种复杂状况也随之呈现出来.令人欣慰地是,随即问世了.个人收集整理勿做商业用途 字符集(简称为),国际标准组织于年月成立工作组,针对各国文字、符号进行统一性编码.年美国跨国公司成立,并于年月与达成协议,采用同一编码字集.目前是采用位编码体系,其字符集内容与地()相同.于年月通过(),目前版本于公布,内容包含符号个,汉字个,韩文拼音个,造字区个,保留个,共计个.编码后地大小是一样地.例如一个英文字母"" 和一个汉字"好",编码后都是占用地空间大小是一样地,都是两个字节!个人收集整理勿做商业用途 可以用来表示所有语言地字符,而且是定长双字节(也有四字节地)编码,包括英文字

信息交换用汉字编码字符集

〇信息交换用汉字编码字符集--基本集〈—即国家标准 GB2312-80 从1975年开始,我国为了研究汉字的使用频度,进行了大规模的字频统计工作,内容包括工业、农业、军事、科技、政治、经济、文学、艺术、教育、体育、医药卫生、天文地理、自然、化学、文字改革、考古等多方面的出版物,在数以亿计的浩瀚文献资料中,统计出实际使用的不同的汉字数为6335个,而其中有3000多个汉字的累计使用频度达到了99.9%,而另外的3000多个累计频度不到0.1%,说明了常用汉字与次常用汉字的数量不足7000个,这就为国家制定汉字库标准提供了依据。 1980年颁布了〇信息交换用汉字编码字符集—基本集〈的国标交换码,国家标准号为:GB2312-80,选入了6763个汉字,分为两级,一级字库中有3755个,是常用汉字,二级字库中有3008个,是次常用汉字;还选入了682个字符,包含有数字、一般符号、拉丁字母、日本假名、希腊字母、俄文字母、拼音符号、注音字母等。以前我国大陆的各种中文DOS版本、Windows3.1 /3.2版本,装入的字库都是国标一二级字库。 〇GB2312-80〈对 7445 个图形字符作了二进制数编码,这些图形字符是: 6763 个汉字,字体为简化字,分成两级。第一级汉字 3755 个,按拼音排序,约占近代文献汉字累计使用频度 99.9% 左右;二级汉字 3008 个,按部首、笔画排序。一、二级汉字约占累计使用频度 99.99% 以上。 202 个一般符号。其中包括 1.~20.,(1)~(20),?~?,(-)~(+) 等。 22 个数字。其中 0~9 共 10 个,‥~‰ 共 12 个。 52 个拉丁字母。其中大写字母A~Z 26 个,小写字母a~z 26 个。 169 个日文假名。其中平假名 83 个,片假名 86 个。 48 个希腊字母。其中大写字母Α~Χ24 个,小写字母α~ω24 个。 66 个俄文字母。其中大写字母А~Я33 个,小写字母а~я 33 个。 26 个汉语拼音符号,包括带声调符号和其它符号的字母。 37 个汉语注音字母,?~ㄗ。 GB2312简体中文编码表 code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F A1A0 、。? í ì ¨ 〃?—~‖ … ‘ ’ A1B0 “ ” 【】々〆〇〈〉《》「〒〓」『 A1C0 a ? ? ? ?  ̄ ? ? ? ? ‵ ? ? ? ? ※ A1D0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A1E0 ? ? ? ? ? ? ? $¤ ??? § ? ? ? A1F0 ? ? ? ? ? ? ? ? ? ? ″ ? ′ ? 』 code +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F A2A0 ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ A2B0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

字符汉字编码学案.doc

字符汉字编码学案 一、请同学们仔细观察下面的数据,发现石什么规律吗? 十进制二进制 00 11 210 311 4100 5101 6110 7111 8100 9100 1 10101 11101 1 12110 13110 1 14111 15111 1 161000 思考: 7> 〃个二进制位最大值是多少?数学公式为? 2、用〃个二进制位最多可以表示多少种不同的信息?数学公式为 3、要表示X个状态至少要用几位二进制? 二、二进制虽然复合计算机的特点,但不便于我们人类书写和记忆,转换成十进制乂费时费力,你有什么好的方法吗? 请同学们观察书木P5的图表,思考十六进制的特点

10U0011B=D 68D=B 110010B=H 43H=B 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F 1、从位数上来分析,十六进制和二进制位数上存在什么样的比例关系:? 2、 二进制、十进制、十六进制的标识分别是大写字母\\ 3、 小组探究任务:十进制与二进制互换: HOIOOIOB ==?H 7FH=? B (请同学们熟悉进位制的标识) 你觉得用十六进制来记录二进制的优点有哪些:? 4、 50D=B 110110B=D 1110011B=H 101H=B (选择手工或计算器来完成) 三、任务挑战: 1、(请分别用智能ABC 和智能拼音输入) 右图是演员王刚在影视作品《宰相刘罗锅》中的塑造的人物 9 . 另外大家认得这个“幼”字吗?它的读音是? 2、 同学们觉得上述现象的原因是? 3、 双击打开“验证字符的ASCII 码.exe”或“查询字符的编码.exe”,观 察26个英文字母 和十个数字所对应的编码;汉字能不能查看?例如输入“效实”,会有什么结果?为什么? 四、一探究竟 打开桌而上的快捷方式:? Ultra Edit,熟悉使用后,完成下列任务: 1、 完成学生活动手册中Plv 实践一>中的4. (1)、(2)、(3) (4),并在活动手册上做好相 关记录,思考其中的GBK 和GB2312指什么?可参考书本P7内容 2、 小组探究任务(结合刚才的实践活动和书本P6-P8的内容) (1)日前国际上通用的字符编码是 ___________ ,占―位二进制,最多能表示 个 字母符号等内容 (2)作为世界上三大古老文字之一的汉字,计算机乂是如何对其进行编码的?即编码的 名称是,占—位二进制,原因是? (3)拼音码、GB2312、处理码、字形码是同一种编码吗?为什么? 知识链接:汉字的编码(交换码)知多少: GB2312: 6763 个汉字(80 年)

常用字符集介绍和编码转换原理

常用字符集介绍和编码转换原理 目录 1. GB2312编码介绍 (2) 1.1 基本信息 (2) 1.2 GB标准 (2) 1.3 分区表示 (2) 1.4 字节结构 (2) 2. 通用字符集UCS (3) 2.1 定义 (3) 2.2 概要 (3) 2.3 实现级别 (3) 2.4 与UNICODE的兼容关系 (3) 3. unicode编码介绍 (3) 3.1 基本简介 (4) 3.2 编码实现 (4) 3.2.1 编码方式 (4) 3.2.2 实现方式 (5) 4. UTF-8介绍 (5) 4.1 基本介绍 (5) 4.2 编码原理 (5) 4. 转换原理 (7)

1. GB2312编码介绍 1.1 基本信息 1.2 GB标准 GB2312或GB2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集·基本集》,又称为GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB2312。 GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。 GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。 对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。 1.3 分区表示 GB 2312中对所收汉字进行了―分区‖处理,每区含有94个汉字/符号。这种表示方式也称为区位码。 01-09区为特殊符号。 16-55区为一级汉字,按拼音排序。 56-87区为二级汉字,按部首/笔画排序。 10-15区及88-94区则未有编码。 举例来说,―啊‖字是GB2312之中的第一个汉字,它的区位码就是1601。 1.4 字节结构

国标(GB2312-80)汉字编码对照表

汉字编码简明对照表 说明: 1、下列汉字取自国标(GB 2312-80)中的分级与排列内容;包含所有的第一级汉字和第二级汉字中的常用部分。 2、第一级汉字(16—55区的汉字)以拼音字母为序进行排列,同音字以笔形顺序横、竖、撇、捺、折为序,起笔相同的按第二笔,依次类推;第二级汉字(56-87区的汉字)按部首为序进行排列。 3、对于多音字,仅在表中出现一次。如:柏,音(bai,bo),表中仅出现在“bai”中。 4、汉字区位码用阿拉伯数字表示,每个汉字对应4个数字。 5、本汉字代码表摘自《字符集和信息编码国家标准汇编》,(中国标准出版社,1998年编)。 a 啊 1601 阿 1602 吖 6325 嗄 6436 腌 7571 锕 7925 ai 埃 1603 挨 1604 哎 1605 唉 1606 哀 1607 皑 1608 癌 1609 蔼 1610 矮 1611 艾 1612 碍 1613 爱 1614 隘 1615 捱 6263 嗳 6440 嗌 6441 嫒 7040 瑷 7208 暧 7451 砹 7733 锿 7945 霭 8616 an 鞍 1616 氨 1617 安 1618 俺 1619 按 1620 暗 1621 岸 1622 胺 1623 案 1624 谙 5847 埯 5991 揞 6278 犴 6577 庵 6654 桉 7281 铵 7907 鹌 8038 黯 8786 ang 肮 1625 昂 1626 盎 1627 ao

凹 1628 敖 1629 熬 1630 翱 1631 袄 1632 傲 1633 奥 1634 懊 1635 澳 1636 坳 5974 拗 6254 嗷 6427 岙 6514 廒 6658 遨 6959 媪 7033 骜 7081 獒 7365 聱 8190 螯 8292 鏊 8643 鳌 8701 鏖 8773 ba 芭 1637 捌 1638 扒 1639 叭 1640 吧 1641 笆 1642 八 1643 疤 1644 巴 1645 拔 1646 跋 1647 靶 1648 把 1649 耙 1650 坝 1651 霸 1652 罢 1653 爸 1654 茇 6056 菝 6135 岜 6517 灞 6917 钯 7857 粑 8446 鲅 8649 魃 8741 bai 白 1655 柏 1656 百 1657 摆 1658 佰 1659 败 1660 拜 1661 稗 1662 捭 6267 呗 6334 掰 7494 ban 斑 1663 班 1664 搬 1665 扳 1666 般 1667 颁 1668 板 1669 版 1670 扮 1671 拌 1672 伴 1673 瓣 1674 半 1675 办 1676 绊 1677 阪 5870 坂 5964 钣 7851 瘢 8103 癍 8113 舨 8418 bang 邦 1678 帮 1679 梆 1680 榜 1681 膀 1682 绑 1683 棒 1684 磅 1685 蚌 1686 镑 1687 傍 1688 谤 1689 蒡 6182 浜 6826 bao 苞 1690 胞 1691 包 1692 褒 1693 剥 1694 薄 1701 雹 1702 保 1703 堡 1704 饱 1705 宝 1706 抱 1707 报 1708 暴 1709 豹 1710 鲍 1711 爆 1712 葆 6165 孢 7063 煲 7650 鸨 8017 褓 8157 趵 8532 龅 8621 bei 杯 1713 碑 1714 悲 1715 卑 1716 北 1717 辈 1718 背 1719 贝 1720 钡 1721 倍 1722 狈 1723 备 1724 惫 1725 焙 1726 被 1727 孛 5635 陂 5873 邶 5893 蓓 6177 悖 6703 碚 7753 鹎 8039 褙 8156 鐾 8645 鞴 8725 ben 奔 1728 苯 1729 本 1730 笨 1731 畚 5946 坌 5948 贲 7458 锛 7928 beng 崩 1732 绷 1733 甭 1734 泵 1735 蹦 1736 迸 1737 嘣 6452 甏 7420 bi

《统一的中日韩汉字编码字符集》(CJK)字根系统研究

《统一的中日韩汉字编码字符集》(CJK)字根系统研究 《统一的中日韩汉字编码字符集》(CJK)作为新的汉字信息处理国际标准,使汉字信息处理向国际化方向迈出了重要的一步,对汉字字形的定量定性研究也提出了更高的要求。在此基础上,依靠计算机字形技术的支持,采用字根分解与合成的方法,有可能表示出CJK的全部字符从而实现其无字库化处理。因此,研究CJK字根系2统,对于CJK的工程应用具有重要作用。 中日韩汉字字形有别而音义互异,但都是可分析的文字,其基本构形单位都是笔画或字根,因此,字根分析法对其同样适用。本文认为,要得出一个较为科学的CJK字根系统,在理论和实践上必须着重解决两个问题,一个是笔画与字根的分野即单笔字根的问题,另一个就是字根变体的问题。本文主要分析了CJK的单笔字根和字根变体,并对统计得出的CJK676个字根的有关数据进行了系统的分析,希望能为CJK的相关研究提供参考。 一、CJK的单笔字根 (一)为什么要提出"单笔字根" 字根是汉字字符的直接构形成分,是可以独立运用的最小构形单位。一般说来,字根包含两个以上笔画,但当单一笔画与字根直接参与汉字字符构形时,这一笔画由于具备了字根的价值和功能而上升到字根层级,称为"单笔字根"。提出这一概念主要基于以下考虑: 1、汉字字符的构形成分中确实存在许多相对独立的单一笔画,归入邻近的任一字根都不合适,CJK中就有400多个字符包含这种笔画。如果说汉字字符都是由作为笔画组合体的字根构成的,显然不符合事实;如果说汉字字符是由字根与笔画组成的,固然也未尝不可,但这样就难以清晰地体现字符构形的层级性,故"单笔字根"的提出有其现实的必要性。 2、CJK字符集收入了"一丨丶丿乀乁乙乚乛亅"十个单笔画的字符,如果不引入"单笔字根"的概念,则这十个字符无法进行字根分析。 3、适当拆出字符中的单笔字根,可以大大简化字根系统。 (二)如何析出单笔字根 笔画与字根毕竟是不同层级的构形成分,因此单笔字根以尽量少析出为宜。我们在分析CJK单笔字根的过程中,主要采用了以下方法: 1、某一单笔画如果与字符中其它笔画处于相交或相接的关系,则不能析为单笔字根。如"子、孑、孓"都是由字根"了"与单笔画相交或相接而成,故不再析出单笔字根。 2、如果单笔画与字符中其它笔画均处于相离的关系,则根据以下情况处理: (1)对于点笔来说,若其与某一字根呈内聚之势,且作为整体具有构字能力,则合为一个字根,如"犬、太、刃、玉"等;反之,若作为整体无构字能力,则立点笔为单笔字根,如"乓"。这样处理可使字根系统的层级性得以体现,同时也照顾了通常的字根拆分习惯。 (2)如果某一单笔画用另一笔画或字根替换后成了另一字符,则只能析为单笔字根,如"糺"中的"乚"替换为"工"后成了另一字符"紅",因此"乚"为单笔字根。能用这种方法来判断的单笔字根在CJK单笔字根中约占24%。 (3)偏旁部首通常使用频率较高,一般作为整体进入字根系统,不再拆出单笔字根,如"纟"、"刂"、"寸"、"灬"等。 为简化字根系统,有时也需要作变通处理,如"示"中与第一横笔相邻的也不是分笔字根,但将其析出后,余部分无构字能力,为简化字根系统,"示"拆为"二、小",不涉及单笔字根问题。 (三)CJK的单笔字根统计 我们采用上述方法得出了CJK单笔字根的有关数据,详见下表: 如果把提归入横,捺归入点,竖钩归入竖,其它的归入折,则五种基本笔画在CJK中

字符集与编码

字符集与编码 一.字符集与编码之间的关系 1.为了在计算机中存储与处理,必须对字符进行数字化编码。 2.字符集规定了包含哪些字符,每个字符的值是什么 3.编码规定了对于这些值,如何存储 4.有些标准同时规定了字符集及其编码 如:目前使用最广泛的西文字符集及其编码是ASCII 字符集和ASCII码(ASCII是American Standard Code for Information Interchange的缩写),它同时也被国际标准化组织(International Organization for Standardization, ISO)批准为国际标准 5.有些标准同一个字符集可以有多种编码格式 二.字符集及编码 1.SBCS (single byte character set) 1.1 ASCII (1).7位编码,范围0x00-0x7F (2).码值32-127(0x20-0x7F) (3).0x00-0x1F 之间的为控制字符,每个字符有一个缩写的名字 (4).数字,大写字母,小写字母的编码都是连续的 目前使用最广泛的西文字符集及其编码是 ASCII 字符集和 ASCII 码( ASCII 是American Standard Code for Information Interchange 的缩写),它同时也被国际标准化组织( International Organization for Standardization, ISO )批准为国际标准。 基本的 ASCII 字符集共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。标准 ASCII 码使用 7 个二进位对字符进行编码,对应的 ISO 标准为 ISO646 标准。下表展示了基本 ASCII 字符集及其编码: 字母和数字的 ASCII 码的记忆是非常简单的。我们只要记住了一个字母或数字的ASCII 码(例如记住 A 为 65 , 0 的 ASCII 码为 48 ),知道相应的大小写字母之间差 32 ,就可以推算出其余字母、数字的 ASCII 码。 虽然标准 ASCII 码是 7 位编码,但由于计算机基本处理单位为字节( 1byte = 8bit ),所以一般仍以一个字节来存放一个 ASCII 字符。每一个字节中多余出来的一位(最高位)在计算机内部通常保持为 0 (在数据传输时可用作奇偶校验位)。 由于标准 ASCII 字符集字符数目有限,在实际应用中往往无法满足要求。为此,国际标准化组织又制定了 ISO2022 标准,它规定了在保持与 ISO646 兼容的前提下将ASCII 字符集扩充为 8 位代码的统一方法。 ISO 陆续制定了一批适用于不同地区的扩充 ASCII 字符集,每种扩充 ASCII 字符集分别可以扩充 128 个字符,这些扩充字符

汉字编码

汉字编码 上海市洋泾中学沈文艳 一、教学目标: 1.知识与技能: (1)理解汉字字形码、机内码及输入码的作用及特点 (2)了解计算机处理汉字的一般过程 2.过程与方法: (1)通过ViewChr软件观察汉字点阵图,探究汉字在屏幕上的显示方式,认识字形码。(2)通过WinHex软件观察汉字内码,探究汉字在计算机内部的存储方式,认识机内码。3.情感、态度与价值观: 通过简介我国科学家王选及汉字全息编码发明少年杜冰蟾的事例,弘扬爱国主义精神及民族自豪感,激发创新意识。认识取得成功必须要有坚韧不拔的毅力和科学严谨的治学态度。 二、教学重点难点 教学重点:汉字输入码、机内码及字形码的作用及特点 教学难点: (1)对汉字三种编码作用及相互关系的理解 (2)汉字字形码存储容量的计算方法。 三、教学过程:

《汉字编码》导学案 班级:姓名:学号: 【学习目标】 1.学习目标 (1)理解汉字字形码、机内码及输入码的作用及特点 (2)了解计算机处理汉字的一般过程 2.重点难点 (1)对汉字三种编码作用及相互关系的理解 (2)汉字字形码存储容量的计算方法。 【活动探究】 活动1:汉字在屏幕上是怎样显示的 步骤: (1)打开ViewChr软件,输入不同的汉字,观察汉字的显示方式, 通过观察,可以很容易地看出,每个汉字是通过一些点的组合来显示的。汉字中有笔画的部分,点是_____(有/无)颜色的,没笔画的部分,点是_____(有/无)颜色的。也就是说屏幕上的每个点既可以有颜色,也可以无颜色,所以,每个点在颜色的显示上最多有_____种状态。 (2)在ViewChr软件中输入汉字“上”,你能否根据软件的显示结果,在下面的16×16的方格图内用二进制数码来描述这个汉字 因为每一个点有两种颜色状态,又因为一个二进制位 可以表示_____种信息,所以,要表示图中的每一个点需要

国家标准信息技术汉字编码字符集基本集-全国信息技术标准化

《信息技术通用编码字符集(基本多文种平面)汉字15×16点阵字型》(征求意见稿)编制说明 一、工作简况 1、任务来源 随着信息技术的不断发展,中文信息技术产品所使用硬件设备得到提升,中文信息处理设备对点阵字型出现了新的需求,为了满足信息处理设备对15×16点阵的需求,国家标准化管理委员会在2015年第三批“制、修订国家标准项目计划”中安排了本标准的制定工作,计划代号为20153659-T-469,标准名称为《信息技术通用编码字符集(基本多文种平面)汉字15×16点阵字型》。 本标准由中国电子技术标准化研究院、北京仓颉博雅信息技术有限公司等单位负责起草,标准主要起草人有代红、熊涛等。 2、主要工作过程 标准计划任务下达后,由中国电子技术标准化研究院牵头成立了标准编制组和专家组,并制定了详细的标准研究实施方案。中国电子技术标准化研究院主要负责字型设计、组织协调和标准文本起草,北京仓颉博雅信息技术有限公司负责字型设计,火箭军装备研究院第四研究所和潍坊北大青鸟华光照排有限公司负责字型纠错修改,专家组负责字型审查工作。 按照标准实施方案的要求,标准编制组于2016年6月底,分批提供了15×16点阵字型的设计初稿,并将字型设计初稿提供给字型专家审查,在设计点阵字型时对有疑问的字进行查证讨论,做到每个字的修改确定有据可查。根据字型专家提出的修改意见,标准编制组对字型设计初稿进行修改,于2017年7月底前完成了对字型设计初稿的修改整理。在对字型设计稿修改的同时,标准编制组还进行了标准文本的起草工作,2017年10月完成了标准草案。2017年11月标准草案提交中国电子技术标准化研究院进行标准专家内审,标准起草组根据标准内审专家提出的意见对草案进行修改,形成了标准的征求意见稿,现向各位征求意见。 3、标准编制的主要成员单位及其所做的工作 本标准由中国电子技术标准化研究院、北京仓颉博雅信息技术有限公司、火箭军装备研究院第四研究所等单位负责起草。中国电子技术标准化研究院主要负责标准文本的起草、标准研究的组织协调,北京仓颉博雅信息技术有限公司负责

中文字符集、编码

前言
由于工作的需要,参考了好多资料整理出来一份计算机汉字处理报告,不敢独享,希 望与大家共享。Ziggler 现代计算机技术虽然先进, 但大多数人只知录入 GB-2313 字符集内的 6763 个简体汉字, 对包含 21003 个简繁体汉字的 GBK 字符集的文字录入、字体 显示就已不甚了解(市面上 绝大多数所谓的繁体字体,其实采用的是 GB2313 字符集简体字的编码,用字体显示为繁体 字,而不是直接用 GBK 字符集中繁体字 的编码,错误百出) 。而汉字总数至少有近 10 万 个,目前计算机能处理的,也有 70244 个,已非一般人所能知能用了。 由于汉字总数非常庞大。 汉字总共有多少字?到目前为止, 恐怕没人能够答得上来精确 的数字。据估计,汉字数量达到 11 万左右。 这里所说的七万多汉字, 是指 UNICODE 超大字集全部七万多中日韩汉字。 (注: Unicode 是指用两个字节表示每个字符的字符编码方案。 ) 那一般计算机能够显示多少个汉字呢?比如大陆这边普遍安装简体 Windows 系统,而 简体 windows 以宋体为系统字型,宋体支持 GBK 编码,所以能显示 20902 个汉字。 要显示 71564 个汉字, 可以采取多种方案, 如: 宋体-方正超大字符集+新细明体 EXTB、 宋体-方正超大字符集+中易宋体 EXTB、宋体 GB18030+新细明体 ExtB、宋体 18030+宋体 ExtB 等等。
中文字符集、编码
字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符 集是多个字符的集合,字符集 种类较多,每个字符集包含的字符个数不同。 计算机要准确的处理各种字符集文字, 需要进行字符编码, 以便计算机能够识别和存储 各种文字。 中文文字数目大, 而且还分为简体中文和繁体中文两种不同书写规则的文字, 而计算机 最初是按英语单字节字符设计的, 因此, 对中文字符进行编码, 是中文信息交流的技术基础。 以下是常见的一些字符集介绍,部分字符集中包括编码介绍。
GB2312 字符集
1.名称的由来 GB2312 又称为 GB2312-80 字符集,全称为《信息交换用汉字编码字符集·基本集》 ,由原中 国国家标准总局发布,1981 年 5 月 1 日实施。 2.特点 GB2312 是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖 99.75%的使用频率,

编码字符集标准及分类研究_谢谦

中 文 信 息 学 报 第20卷第5期 J OURNAL OF CH I NESE I NF OR MATI O N P ROCESSI NG V ol.20N o.5文章编号:1003-0077(2006)05-0083-08 编码字符集标准及分类研究 谢 谦1,2,芮建武1,吴 健1 (1.中国科学院软件研究所开放系统与中文信息处理中心,北京 100080;2.河南大学计算机与 信息工程学院,河南开封 475001) 摘要:编码字符集标准是计算机处理文字信息的基础,本文提出了编码字符集三元组抽象,对现有编码字符集标准进行了简单回顾和总结,深入剖析了影响巨大的ISO2022标准及其派生标准,对ISO2022编码机制应用于多语言环境的局限性进行了探讨,阐明了使用通用编码字符集UCS的必要性,并对其进行了分析。探讨了现有编码分类方法存在的问题,引入了一种对编码字符集以及实现方法进行分类的新方法,使用该方法对现有标准进行了归类;最后对汉字字符集相关的国家标准进行了分析评介。 关键词:计算机应用;中文信息处理;编码字符集 中图分类号:TP391 文献标识码:A Research on Coded Character Set Standards and C lassification X I E Q ian1,2,RU I Jian-wu1,W U Jian1 (1.Open Syste m and Ch i nes e Infor m ati on Processi ng Cen ter,Institute of Soft w are,C h i nes e A cade m y of S ci en ces,B eiji ng100080, Ch i na;2.S chool of Compu t er and In for m ation Engineeri ng,H enan Un i versity,Kaifeng,H enan475001,Ch ina) Ab strac t:Coded character se t standa rd are t he base s of t he co m puter t ex t infor m ati on processing.In t his pape r,a3-turples m ode l is proposed t o descibe the coded character se.t The ex isting code standards are reviewed and su mma-rized.A nd t he ISO2022and it's deriv i ng standards are ana l y zed in de tail;incl uding the li m ita tion o f u tilizi ng IS O 2022in m ultili ngua l env iron m en.t N ecessit y o f foundi ng UCS(U niversa lCha racter Se t)is present ed,a long w it h an outline ana l y sis o f UCS.A ft e r eva l uating current c l assifica tion m e t hods o f coded character set standa rds,a new m eth-od is produced w ith applica tion i n ca talogu i ng existing standa rds.W e c l o se ou r paper w ith a brief ana l ysis of i m po r-tan t Chinese na tiona l st andards on Han character se.t K ey word s:compu t e r applicati on;Ch i nese inf o r m ati on processing;coded character se t 计算机应用从单纯的科学计算转向信息处理,是引发二十世纪信息革命的里程碑事件,而支撑这一转变的重要基础就是字符编码;通过制定字符编码标准,在人能理解的文字信息与计算机内部表达之间建立了一个基本的沟通桥梁,直到今天,基于文字的交互途径仍然是最主要的人机界面。正如Unicode标准中所言[1],“对计算机软件系统而言,字符编码就像螺钉和螺母———虽然微小,却以各种方式被普遍使用。” 收稿日期:2005-07-08 定稿日期:2006-05-22 基金项目:国家863计划资助项目(2003AA1Z2110);中国科学院知识创新工程资助项目(KGCX2-S W-504) 作者简介:谢谦(1968—),男,博士生,主要研究领域为系统软件国际化,X W i ndow系统,L inux标准化.

Unicode汉字编码表

Unicode汉字编码表 1 Unicode编码表 Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符, 比如汉字"经"的编码是0x7ECF,注意字符编码一般用十六进制来 表示,为了与十进制区分,十六进制以0x开头,0x7ECF转换成十进制 就是32463,UCS-2用两个字节来编码字符,两个字节就是16位二进制, 2的16次方等于65536,所以UCS-2最多能编码65536个字符。 编码从0到127的字符与ASCII编码的字符一样,比如字母"a"的Unicode 编码是0x0061,十进制是97,而"a"的ASCII编码是0x61,十进制也是97, 对于汉字的编码,事实上Unicode对汉字支持不怎么好,这也是没办法的, 简体和繁体总共有六七万个汉字,而UCS-2最多能表示65536个,才六万 多个,所以Unicode只能排除一些几乎不用的汉字,好在常用的简体汉字 也不过七千多个,为了能表示所有汉字,Unicode也有UCS-4规范,就是用 4个字节来编码字符,不过现在普遍采用的还是UCS-2,只用两个字节来 编码,看一下Unicode对汉字的编码:

------------------------------------------------------------------------ 2 汉字编码表 U+ 0 1 2 3 4 5 6 7 8 9 A B C D E F ----------------------------------------------------- 4e00 一丁丂七丄丅丆万丈三上下丌不与丏 4e10 丐丑丒专且丕世丗丘丙业丛东丝丞丟 4e20 丠両丢丣两严並丧丨丩个丫丬中丮丯 4e30 丰丱串丳临丵丶丷丸丹为主丼丽举丿 4e40 乀乁乂乃乄久乆乇么义乊之乌乍乎乏 4e50 乐乑乒乓乔乕乖乗乘乙乚乛乜九乞也 4e60 习乡乢乣乤乥书乧乨乩乪乫乬乭乮乯 4e70 买乱乲乳乴乵乶乷乸乹乺乻乼乽乾乿 4e80 亀亁亂亃亄亅了亇予争亊事二亍于亏 4e90 亐云互亓五井亖亗亘亙亚些亜亝亞亟 4ea0 亠亡亢亣交亥亦产亨亩亪享京亭亮亯 4eb0 亰亱亲亳亴亵亶亷亸亹人亻亼亽亾亿 4ec0 什仁仂仃仄仅仆仇仈仉今介仌仍从仏 4ed0 仐仑仒仓仔仕他仗付仙仚仛仜仝仞仟 4ee0 仠仡仢代令以仦仧仨仩仪仫们仭仮仯 4ef0 仰仱仲仳仴仵件价仸仹仺任仼份仾仿 4f00 伀企伂伃伄伅伆伇伈伉伊伋伌伍伎伏 4f10 伐休伒伓伔伕伖众优伙会伛伜伝伞伟 4f20 传伡伢伣伤伥伦伧伨伩伪伫伬伭伮伯

关于字符集和乱码的思考

关于字符集和乱码的思考 关于字符集和乱码的思考2011-12-12 16:05:58 分类:Delphi 重要提示:本文并非学术文章,本人也并非语言和文字学领域人士,只是出于好奇心,根据自己的理解写下这篇文章。本文的参考文档都来源于互联网,而且并未一一考证其准确性和权威性,因此本文仅供参考。 字符集和字符编码的问题一直困扰着我,之间曾经多次尝试把这个问题理解清楚,但始终由于有些细节问题无法自圆其说因而放弃。网上的资料多数描述过于简单,又或者作者本人对问题也了解不深入,容易产生误导。最近我终于下定决心将之前对“乱码”问题的思考更进一步,否则将始终是一丝遗憾。这里也不得不感叹,老外的“科普”做的好啊,网上有很多质量相当高的文章,表述严密,引用充分,例证丰富,我相信在国内各领域的专家也不少,计算机和语言学方

面都有很多有建树的大牛,也许是太忙吧。对我个人而言,最重要的一片文章是“Character set encoding basics”,在本文最后有链接的地址,本人的翻译版本在这里: https://www.360docs.net/doc/6818196660.html,/space.php?uid=11187&do=b log&id=3034493 1.字符集的基本概念 什么是字符集?什么是字符编码? 按照“Character set encoding basics”文中的定义,字符集的编码模型分为以下4个层次 1)抽象字符清单Abstract character repertoire (ACR),无序,无编码; 2)已编码字符集Coded character set (CCS),有序,有编码; 3)字符编码规则Character encoding form (CEF),有序,有编码; 4)字符编码方案Character encoding scheme (CES),有序,有编码,有传输和储存规则(字节序); 这种分层方式,比较偏于学术化,不太容易理解。按我个人的理解,GB2312/GBK/GB18030/ASCII这些字符集编码规则,由于都基于8-bit字节,是属于前三层的,可以认为是三

UTF8与GBK字符编码之间的相互转换

UTF8与GBK字符编码之间的相互转换 C++ UTF8编码转换CChineseCode 一预备知识 1,字符:字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。“中”“国”这是两个汉字字符。字符仅仅代表一个符号,没有任何实际值的意义。 2,字符集:字符集是字符的集合。例如,汉字字符是中国人最先发明的字符,在中文、日文、韩文和越南文的书写中使用。这也说明了字符和字符集之间的关系,字符组成字符集(iso8859-1,GB2312/GBK,unicode)。 3,代码点:字符集中的每个字符都被分配到一个“代码点”。每个代码点都有一个特定的唯一数值,称为标值。该标量值通常用十六进制表示。 4,代码单元:在每种编码形式中,代码点被映射到一个或多个代码单元。“代码单元”是各个编码方式中的单个单元。代码单元的大小等效于特定编码方式的位数:UTF-8 :UTF-8 中的代码单元由8 位组成;在UTF-8 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。代码点将被映射到一个、两个、三个或四个代码单元;UTF-16 :UTF-16 中的代码单元由16 位组成;UTF-16 的代码单元大小是8 位代码单元的两倍。所以,标量值小于 U+10000 的代码点被编码到单个代码单元中;UTF-32:UTF-32 中的代码单元由32 位组成;UTF-32 中使用的32 位代码单元足够大,每个代码点都可编码为单个代码单元;GB18030:GB18030 中的代码单元由8 位组成;在GB18030 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。代码点将被映射到一个、两个或四个代码单元。 5,举例:“中国北京香蕉是个大笨蛋”这是我定义的aka字符集; 各字符对应代码点为: 北00000001 京00000010 香10000001 蕉10000010 是10000100 个10001000 大10010000 笨10100000 蛋11000000 中00000100 国00001000 下面是我定义的zixia 编码方案(8位),可以看到它的编码中表示了aka字符集的所有字符对应的代码单元; 北10000001 京10000010 香00000001 蕉00000010 是00000100 个00001000 大00010000 笨00100000 蛋01000000 中10000100 国10001000 所谓文本文件就是我们按一定编码方式将二进制数据表示为对应的文本如00000001000000100000010000001000000100000010000001000000这样的文件。我用一个支持zixia编码和aka字符集的记事本打开,它就按照编码方案显示为“香蕉是个大笨蛋” 如果我把这些字符按照GBK另存一个文件,那么则肯定不是这个,而是1100111111100011

相关文档
最新文档