请登录[¤ 阳光论坛 ¤]参与讨论


阳光宝宝
90

 □ 主题: 汉字编码 Unicode、GB(gb2312)、GBK、BIG5、UTF-8
 □ 内容: 1楼

      Unicode: 
       
       对于英文来说,ascii码 0-127就足以代码所有字符,对于中文而言,则必须使用两个字节(byte)来代表一个字符,具第 
      一个字节必须大于127(所以我们有许程序判断中文都是以ascii码大于127作为条件)  
       以上用两个字节来表示一个中文的方式,在习惯上称为双字节(即DBCS: Double-Byte Character Set),而相对之下,英文 
      的字符码就称为单字节SBCS(Single-Byte Character Set)。  
       虽然双字节(DBCS)足以解决中英文字符混合使用情况,但对于不同字符系统而言,必须经过字符码转换,非常麻烦。例 
      如:中英文混合情况,日文,韩文等等。  
       为解决这个问题,Apple, Xerox, Microsoft, IBM, Novell, Borland...很多公司联合起来制订了一套可以适用于全世界 
      所有国家的字符码,就称为Unicode  
       Unicode的特点是:  
       不管哪一国的字符码均以两个Byte表示,例如"A"在Unicode则是16进制 41和00的组合,即4100,高位41(转换为Ascii码即 
      是65=A),  
       Windows NT/2000以Unicode来表示字符集,例如你可以看到MS SQL Server中产生的SQL文件可以选择是以Unicode来保存还 
      是以普通格式来保存,如果你以Unicode保存,则在95/98平台许多软件均无法正确读出其格式。  
       同时你还可以注意到95/98中API定义,许多名称结尾是有一个A的,例如  
       WriteProfileStringA  
       而在NT/2000操作系统中,提供了两套API,另外一个命令是WriteProfileStringW,以W 结尾的API只适用于NT / 2000。 
      (在NT中使用以W结尾的API函数效率比A结尾的要快,因为省去了Unicode和DBCS/SBCS的转换过程)  
       这样我们经常要用到的判断字符串长度的函数,在NT和95/98下执行结果不同,如下:(下面代码适合于VB, ASP)  
        
       95/98中:  
       len("abc中国") 返回 7 (因为每个中文作为两个Ascii码来看)  
       nt/2000中:  
       len("abc中国") 返回 5 (因为每个字符都作为一个Unicode来看)  
       明天将介绍如何在 VB / NT 环境下使 len("abc中国") 返回长度等于7  
       (PB不存在以上情况,除非你在NT下使用PB的Unicode版本,通常我们大家使用的均是PB的Windows 32位版本) 
       
      
——
      
争分夺秒背单词 → data  n.数据; 资料
 □ 发帖时间:2010-12-31|10:21:47 |回复|返回|



阳光宝宝
90

 □ 主题: 回应:汉字编码 Unicode、GB(gb2312)、GBK、BIG5、UTF-8
 □ 内容: 2楼

      BIG5: 
       
       
      “大五码(Big5)”是在1984年由台湾财团法人资讯工业策进会和五家有意愿共同推动电脑中文化的资讯公司所共同创立,故 
      称大五码。五家公司为:宏碁、神通、佳佳、零壹及大众。 
       
       Big5,又称为大五码或五大码,是使用繁体汉字社群中最常用的电脑汉字字符集标准,共收录13,053个中文字,其中有 
      二字为重复编码。Big5常用于台湾、香港和澳门等使用繁体中文的地区。
——
      
争分夺秒背单词 → gust  n.阵风,一阵狂风
 □ 发帖时间:2010-12-31|10:22:07 |回复|返回|



阳光宝宝
90

 □ 主题: 回应:汉字编码 Unicode、GB(gb2312)、GBK、BIG5、UTF-8
 □ 内容: 3楼

      GB(gb2312)  
       
       
      GB2312或GB2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集--基本集》,由中国国家标 
      准总局发布, 1981年5月1日实施。GB2312编码通行于大陆;新加坡等地也采用此编码。几乎所有的中文系统和国际化的软件 
      都支持GB2312。  
      GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB2312收录了包括拉丁字母、希腊字母、日 
      文平假名及片假名字母、俄罗斯语西里尔字母在内的682个全形字符。  
      GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖99.75%的使用频率。  
      对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。  
       
      接下来就是比较新的gb18030  
      * GB18030 也是对 GB2312 的扩展,其编码长度由 2 个字节变为 1~4 个字节  
      o 单字节,其值从 0 到 0x7F。  
      o 双字节,第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x40 到 0xFE(不包括 0x7F )。  
      o 四字节,第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x30 到 0x39,第三个字节的值从 0x81 到 0xFE ,第四 
      个字节的值从 0x30 到 0x39 。  
      是以保持 GB2312/GBK 反向兼容的条件下,加入 4-byte 部份,让 GB18030 可以  
      完全地 一对一 映射到 Unicode U+0000..U+10FFFF,是一个「一劳永逸」的方案。 
       
      GB2312-1980 信息交换用汉字编码字符集 基本集  
      GB2312共收录6763个简体汉字,是一般输入法的默认编码  
       
      GB2312-1980 信息交换用汉字编码字符集 基本集  
      GB11383-1989 信息处理 信息交换用八位代码结构和编码规则  
      GB2311-1990 信息处理 七位和八位编码字符集代码扩充技术  
      GB12345-1990 信息交换用汉字编码字符集 辅助集  
      GB13000.1-1993 信息技术 通用多八位编码字符集(UCS)第一部分  
      GBK-1995 技术规范指导性文件 《汉字内码扩展规范(GBK)1.0版  
      GB18030-2000 信息技术 信息交换用汉字编码字符集 基本集的扩充  
      上面是我国颁布并实施的有关编码方案  
      -后面为发布年份 和名称  
      GB2312共收录6763个简体汉字,是一般输入法的默认编码  
      GBK共收录21004个汉字(包括简体和繁体),是字库庞大的输入法的首选编码  
      BIG5 即通常说的大五码,是港台地区使用的繁体中文编码规格。  
      GB18030 分别以单字节、双字节和四字节进行编码。兼容了GBK和GB2312。当然也支持繁体中文
——
      
争分夺秒背单词 → leadership  n.领导
 □ 发帖时间:2010-12-31|10:22:31 |回复|返回|



阳光宝宝
90

 □ 主题: 回应:汉字编码 Unicode、GB(gb2312)、GBK、BIG5、UTF-8
 □ 内容: 4楼

      GB(gb2312)、GBK 之间的关系 
       
       
      GB2312编码大约包含6000多汉字(不包括特殊字符),编码范围为第一位b0-f7,第二位编码范围为a1-fe(第一位为cf时,第二 
      位为a1-d3),计算一下汉字个数为6762个汉字。 
       当然还有其他的字符。包括控制键和其他字符大约7573个字符编码gbk编码是对G B2312编码的扩充,容纳的汉字更多, 
      但仅仅是扩充,没有质的变化。保留了所有G B2312编码,在此基础上进行编码范围的扩充.容纳(包含特殊字符)共22014个字 
      符编码.gb18030编码是在gbk编码基础上的扩充,因为汉字更多,仅仅使用两位编码已经不能容纳要求的汉字,所以采用了2 
      \4位混和的办法,可以支持更多的汉字编码。并且保留了原有的gbk 2字节编码兼容G B2312和gbk编码的文件。大概容纳 
      55657个编码(包含特殊字符)unicode编码(也就是UTF编码):俗称万国码,致力于使用统一的编码准则表达各国的文字。为表 
      达更多的文字,utf-8采用2/3混编的方式。 
       目前容纳的汉字范围小于gbk编码。并且以3字节的方式处理中文,带来了兼容性的问题,原有的gbk,G B2312,gb18030编 
      码文件都不能正常的处理,还有很长的路要走。
——
      
争分夺秒背单词 → revolution  n.革命;旋转,绕转
 □ 发帖时间:2010-12-31|10:22:52 |回复|返回|



阳光宝宝
90

 □ 主题: 回应:汉字编码 Unicode、GB(gb2312)、GBK、BIG5、UTF-8
 □ 内容: 5楼

      UTF-8 
       
       
      UTF-8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以2或4个bytes来储存,看看 
      以下的比较:  
        以"I am Chinese"为例 
        用ANSI储存:12 Bytes 
        用Unicode/UCS2储存:24 Bytes + 2 Bytes(header) 
        用UCS4储存:48 Bytes + 4 Bytes(header) 
        以"我是中国人"为例 
        用ANSI储存:10 Bytes 
        用Unicode/UCS2储存:10 Bytes + 2 Bytes(header) 
        用UCS4储存:20 Bytes + 4 Bytes(header) 
        由此可见直接以Unicode/UCS的原始形式来储存是一种极大的浪费,而且也不利于互联网的传输(中文稍为合算一点 
      ^_^)。 
        有见及此,Unicode/UCS的压缩形式--UTF8出现了,套用官方网站的首句话『UTF-8 stands for Unicode  
      Transformation Format-8. It is an octet (8-bit) lossless encoding of Unicode characters.』,由于UTF也适用于编 
      码UCS,故亦可称为『UCS transformation formats (UTF)』 
        UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目 
      前用得不多,而UTF8则被广泛应用在文件储存和网络传输中。
——
      
争分夺秒背单词 → preferable  a.更可取的,更好的
 □ 发帖时间:2010-12-31|10:23:13 |回复|返回|



阳光宝宝
90

 □ 主题: 回应:汉字编码 Unicode、GB(gb2312)、GBK、BIG5、UTF-8
 □ 内容: 6楼

      编码原理 
      先看这个模板: 
      UCS-4 range (hex.) UTF-8 octet sequence (binary) 
      0000 0000-0000 007F 0xxxxxxx 
      0000 0080-0000 07FF 110xxxxx 10xxxxxx 
      0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 
      0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
      0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
      0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx 
      编码步骤: 
      1) 首先确定需要多少个8bits(octets) 
      2) 按照上述模板填充每个octets的高位bits 
      3) 把字符的bits填充至x中,字符顺序:低位→高位,UTF8顺序:最后一个octet的最末位x→第一个octet最高位x 
      4) 解码的原理一样。 
      实例:(留意每个bit的颜色,粗体字为模板内容) 
      UCS-4 UTF-8  
      HEX BIN Bytes BIN HEX Bytes  
      0000 000A 00001010 4 00001010 0A 1  
      0000 0099 10011001 4 11000010 10011001 C2 99 2  
      0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3  
        不知大家看懂了没有,其实不懂也无所谓,反正又不用自己算,程式可以完全代劳。 
        以UTF8格式储存的文件档首标识为EF BB BF。 
       
      效率 
        从上述编码原理中得出的结论是: 
        1.每个英文字母、数字所占的空间为1 Byte; 
        2.泛欧语系、斯拉夫语字母占2 Bytes; 
        3.汉字占3 Bytes。 
      UTF8的好处: 
      数据表现:网页可以显示任何语言和文字,只要你的操作系统支持unicode,还有相应的字体,Linux下系统编码为utf8的话,可以 
      解决很多无谓的中文问题,比如mp3播放器或者gtk2. 
      数据交换:无需那些gb2312和big5之间的转换程序了. 
      php里著名的"許功蓋"问题,smarty的问题,都可以很好的解决,这方面的以后扩展来介绍: 
       
      UTF8的坏处: 
      用的中文网站还不多,不利于数据交流. 
      
——
      
争分夺秒背单词 → telephone  n.电话 vi.打电话
 □ 发帖时间:2010-12-31|10:23:37 |回复|返回|



阳光宝宝
90

 □ 主题: 回应:汉字编码 Unicode、GB(gb2312)、GBK、BIG5、UTF-8
 □ 内容: 7楼

      GBK 
       
       
      GBK 是又一个汉字编码标准,全称《汉字内码扩展规范》(GBK),英文名称 Chinese Internal Code Specification ,中华 
      人民共和国全国信息技术标准化技术委员会 1995 年 12 月 1 日制订,国家技术监督局标准化司、电子工业部科技与质量监 
      督司 1995 年 12 月 15 日联合以技监标函 [1995] 229 号文件的形式,将它确定为技术规范指导性文件,发布和实施。这 
      一版的 GBK 规范为 1.0 版。GB 即“国标”,K 是“扩展”的汉语拼音第一个字母。  
      GBK 向下与 GB 2312 编码兼容,向上支持 ISO 10646.1 国际标准,是前者向后者过渡过程中的一个承上启下的标准。  
      ISO 10646 是国际标准化组织 ISO 公布的一个编码标准,即 Universal Multilpe-Octet Coded Character Set(简称  
      UCS),大陆译为《通用多八位编码字符集》,台湾译为《广用多八位元编码字元集》,它与 Unicode 组织的 Unicode 编码 
      完全兼容。ISO 10646.1 是该标准的第一部分《体系结构与基本多文种平面》。我国 1993 年以 GB 13000.1 国家标准的形 
      式予以认可(即 GB 13000.1 等同于 ISO 10646.1)。  
      ISO 10646 是一个包括世界上各种语言的书面形式以及附加符号的编码体系。其中的汉字部分称为“CJK 统一汉字”(C 指 
      中国,J 指日本,K 指朝鲜)。而其中的中国部分,包括了源自中国大陆的 GB 2312、GB 12345、《现代汉语通用字表》等 
      法定标准的汉字和符号,以及源自台湾的 CNS 11643 标准中第 1、2 字面(基本等同于 BIG-5 编码)、第 14 字面的汉字 
      和符号。  
      一、字汇  
      GBK 规范收录了 ISO 10646.1 中的全部 CJK 汉字和符号,并有所补充。具体包括:  
      1. GB 2312 中的全部汉字、非汉字符号。  
      2. GB 13000.1 中的其他 CJK 汉字。以上合计 20902 个 GB 化汉字。  
      3. 《简化字总表》中未收入 GB 13000.1 的 52 个汉字。  
      4. 《康熙字典》及《辞海》中未收入 GB 13000.1 的 28 个部首及重要构件。  
      5. 13 个汉字结构符。  
      6. BIG-5 中未被 GB 2312 收入、但存在于 GB 13000.1 中的 139 个图形符号。  
      7. GB 12345 增补的 6 个拼音符号。  
      8. 汉字“○”。  
      9. GB 12345 增补的 19 个竖排标点符号(GB 12345 较 GB 2312 增补竖排标点符号 29 个,其中 10 个未被 GB 13000.1  
      收入,故 GBK 亦不收)。  
      10. 从 GB 13000.1 的 CJK 兼容区挑选出的 21 个汉字。  
      11. GB 13000.1 收入的 31 个 IBM OS/2 专用符号。  
      二、码位分配及顺序  
      GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。 
      总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。  
      全部编码分为三大部分:  
      1. 汉字区。包括:  
      a. GB 2312 汉字区。即 GBK/2: B0A1-F7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。  
      b. GB 13000.1 扩充汉字区。包括:  
      (1) GBK/3: 8140-A0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。  
      (2) GBK/4: AA40-FEA0。收录 CJK 汉字和增补的汉字 8160 个。CJK 汉字在前,按 UCS 代码大小排列;增补的汉字(包括 
      部首和构件)在后,按《康熙字典》的页码/字位排列。  
      2. 图形符号区。包括:  
      a. GB 2312 非汉字符号区。即 GBK/1: A1A1-A9FE。其中除 GB 2312 的符号外,还有 10 个小写罗马数字和 GB 12345 增补 
      的符号。计符号 717 个。  
      b. GB 13000.1 扩充非汉字区。即 GBK/5: A840-A9A0。BIG-5 非汉字符号、结构符和“○”排列在此区。计符号 166 个。  
      3. 用户自定义区:分为(1)(2)(3)三个小区。  
      (1) AAA1-AFFE,码位 564 个。  
      (2) F8A1-FEFE,码位 658 个。  
      (3) A140-A7A0,码位 672 个。  
      第(3)区尽管对用户开放,但限制使用,因为不排除未来在此区域增补新字符的可能性。  
      三、字形  
      GBK 对字形作了如下的规定:  
      1. 原则上与 GB 13000.1 G列(即源自中国大陆法定标准的汉字)下的字形/笔形保持一致。  
      2. 在 CJK 汉字认同规则的总框架内,对所有的 GBK 编码汉字实施“无重码正形”(“GB 化”);即在不造成重码的前提 
      下,尽量采用中国新字形。  
      3. 对于超出 CJK 汉字认同规则的、或认同规则尚未明确规定的汉字,在 GBK 码位上暂安放旧字形。这样,在许多情况下  
      GBK 收入了同一汉字的新旧两种字形。  
      4. 非汉字符号的字形,凡 GB 2312 已经包括的,与 GB 2312 保持一致;超出 GB 2312 的部分,与 GB 13000.1 保持一 
      致。  
      5. 带声调的拼音字母取半角形式。 
      汉字为三个字符,有时varchar不大够用. 
       
      不过总体来说还是利大于弊,所以一直用吧  
       
      
——
      
争分夺秒背单词 → scarlet  n.猩红色 a.猩红的
 □ 发帖时间:2010-12-31|10:24:03 |回复|返回|

 页次:1/1页 每页10  本主题贴数6 分页: 1


你还没有登录论坛,所以不能发表你的意见。你可以选择:

1、我已注册,我要

2、我还没注册,我要

3、太麻烦了,我还是

Go Top

Copyright by(C)2003-2015 http://abc.sy578.cn