网页设计 传统网站,wordpress上传到主机,做两个阿里网站,网站怎么收录一、概述
1.
英文字母再加一些其他标点字符之类的也不会超过256个#xff0c;用一个字节来表示一个字符就足够了(2^8 256)。但其他一些文字不止这么多字符#xff0c;比如中文中的汉字就多达10多万个#xff0c;一个字节只能表示256个字符#xff0c;肯定是不够的#…一、概述
1.
英文字母再加一些其他标点字符之类的也不会超过256个用一个字节来表示一个字符就足够了(2^8 256)。但其他一些文字不止这么多字符比如中文中的汉字就多达10多万个一个字节只能表示256个字符肯定是不够的因此只能使用多个字节来表示一个字符。
于是当计算机被引入到中国后相关部门设计了GB系列编码(“GB”为“国标”的汉语拼音首字母缩写即“国家标准”之意)。
按照GB系列编码方案在一段文本中如果一个字节是0127那么这个字节的含义与ASCII编码相同否则这个字节和下一个字节共同组成汉字(或是GB编码定义的其他字符)。
因此GB系列编码方案向下完全直接兼容ASCII编码方案。也就是说如果一段用GB编码方案编码的文本里的所有字符都在ASCII编码方案中有定义(即该文本全部由ASCII字符组成)那么这段GB编码实际上和ASCII编码完全一样。
2.
最早的GB编码方案是GB2312收录的汉字不足一万个基本能满足日常使用需求但不包含一些生僻字因此后来又在GB2312基础上进行了扩展。
在GB2312基础上扩展的编码方案称之为GBK(K为“扩展”的拼音首字母)后来又在GBK的基础上进一步扩展称之为GB18030加入了一些国内少数民族的文字一些生僻字被编到了4个字节。
包括GB2312、GBK、GB18030在内的GB系列编码方案(不包括GB13000下同不再赘述GB13000编码方案下文有详解介绍)每扩展一次都完全保留之前版本的编码所以每个新版本都向下兼容。
这里要指出的是虽然都用多个字节表示一个字符但是GB类的汉字编码与后文的Unicode编码方案的UTF-8、UTF-16、UTF-32等字符编码方式CEF是毫无关系的(其中UTF-8对于ASCII字符仍用一个字节编码而非ASCII字符则为多字节编码)。
3.
不过也正因为不得不使用多个字节来表示一个字符相较于只使用单个字节的ASCII编码方案GB系列编码方案与后面要介绍的Unicode编码方案一样无疑导致了更高的复杂度(包括时间复杂度、空间复杂度等)。
比如当多字节字符与原先的ASCII字符混用时
1要么将原先的ASCII字符重新编码为多个字节表示以便与其他多字节字符统一起来(UTF-16、UTF-32等采用的就是这种方法)
2要么保持ASCII字符为单个字节编码不变但将其他多字节字符编码中的各个字节的最高位(即首位)设为1以避免与字节最高位为0的ASCII编码相冲突(GB、UTF-8等采用的就是这种方法)。
前者具有更高的空间复杂度因为原先只需要单个字节表示的ASCII字符现在也必须用多个字节来表示显然更为耗费存储空间后者则具有更高的时间复杂度因为为了避免冲突以及其他种种考虑(比如扩展性、容错性等)使用了更为复杂的编码算法(Encoding Algorithm)无疑更为耗费计算时间。
而且无论是前者还是后者若多字节编码中采用的又是多字节码元(Code Unit)的话(如UTF-16、UTF-32编码采用的就是多字节码元而UTF-8中的非ASCII字符虽然也是多字节编码但采用的却是单字节码元注意GB系列编码虽然除ASCII字符外的其余字符为多字节编码但采用的仍然是单字节码元)由于历史的原因又进一步引发了更为麻烦的字节序(Byte-Order)问题。(编码算法、码元、字节序的相关介绍详见后文解释) 二、GB2312
1.
GB2312编码方案即《信息交换用汉字编码字符集——基本集》是由中国国家标准总局于1980年发布、1981年5月1日开始实施的一套国家标准标准号为GB2312-1980。
GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换通行于中国大陆新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB2312。
2.
GB2312编码为了避免与ASCII字符编码(0~127)相冲突规定表示一个汉字的编码(即汉字内码)的字节其值必须大于127(即字节的最高位为1)并且必须是两个大于127的字节连在一起来共同表示一个汉字(GB2312为双字节编码)前一字节称为高字节后一字节称为低字节而一个字节的值若小于等于127(即字节的最高位为0)自然是仍表示一个原来的ASCII字符(ASCII为单字节编码)。
因此可以认为GB2312是对ASCII的中文扩展(即GB2312完全直接兼容ASCII)正如EASCII是对ASCII的欧洲文字扩展一样。
不过很显然的是GB2312与EASCII码的128~255这段扩展部分所表示的字符是不同的。也就是说GB2312与EASCII虽然都兼容ASCII但GB2312并不兼容EASCII的扩展部分。
事实上目前世界上除ASCII之外的其它通行的字符编码方案基本上都兼容ASCII包括直接兼容与间接兼容详见后文介绍但相互之间除了兼容ASCII字符的部分之外却并不兼容。
笨笨阿林原创文章转载请注明出处
3.
GB2312标准共收录6763个汉字其中一级汉字3755个二级汉字3008个同时除了汉字GB2312还收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。
可能是出于显示上视觉美观的考虑除汉字之外的682个字符中GB2312甚至还包括了ASCII里本来就有的数字、标点、字母等字符。也就是说这些ASCII里原来就有的单字节编码的字符又再编了两个字节长的GB2312编码版本。
这682个双字节编码字符就是常说的“全角”字符而这些字符所对应的单字节编码的ASCII字符就被称之为“半角”字符。
【附全角、半角
全角字符是中文显示及双字节中文编码的历史遗留问题。
早期的点阵显示器上由于像素有限原先ASCII西文字符的显示宽度(比如8像素的宽度)用来显示汉字有些捉襟见肘(实际上早期的针式打印机在打印输出时也存在这个问题)因此就采用了两倍于ASCII字符的显示宽度(比如16像素的宽度)来显示汉字。
这样一来ASCII西文字符在显示时其宽度为汉字的一半。或许是为了在西文字符与汉字混合排版时让西文字符能与汉字对齐等视觉美观上的考虑于是就设计了让西文字母、数字和标点等特殊字符在外观视觉上也占用一个汉字的视觉空间(主要是宽度)并且在内部存储上也同汉字一样使用2个字节进行存储的方案。这些与汉字在显示宽度上一样的西文字符就被称之为全角字符。
而原来ASCII中的西文字符由于在外观视觉上仅占用半个汉字的视觉空间(主要是宽度)并且在内部存储上使用1个字节进行存储相对于全角字符因而被称之为半角字符。
后来其中的一些全角字符因为比较有用就得到了广泛应用(比如全角的逗号“”、问号“”、感叹号“”、空格“ ”等这些字符在输入法中文输入状态下的半角与全角是一样的英文输入状态下全角跟中文输入状态一样但半角大约为全角的二分之一宽)专用于中日韩文本成为了标准的中日韩标点字符。而其它的许多全角字符则逐渐失去了价值(现在很少需要让纯文本的中文和西文字符对齐了)就很少再用了。
现在全球字符编码的事实标准是Unicode字符集及基于此的UTF-8、UTF-16等编码实现方式。Unicode吸纳了许多遗留(legacy)编码并且为了兼容性而保留了所有字符。因此中文编码方案中的这些全角字符也保留下来了而国家标准也仍要求字体和软件都支持这些全角字符。
不过半角和全角字符的关系在UTF-8、UTF-16等中不再是简单的1字节和2字节的关系了。具体参见后文。
——综合了知乎《中文输入法为什么会有全角和半角的区别》下多位答主的回答有多处修改】 三、GBK
1.
GB2312-1980共收录6763个汉字覆盖了中国大陆99.75%的使用频率基本满足了汉字的计算机处理需要。
但对于人名、古汉语等方面出现的罕用字、生僻字GB2312不能处理如部分在GB2312-1980推出以后才简化的汉字(如“啰”)、部分人名用字(如歌手陶喆的“喆”字)、台湾及香港使用的繁体字、日语及朝鲜语汉字等并未收录在内。
于是全国信息技术标准化技术委员会利用GB2312-1980未使用的码点空间收录GB13000.1-1993的全部字符于1995年12月1日发布了《汉字内码扩展规范(GBK)》(Guo-Biao Kuozhan国家标准扩展码是根据GB13000.1-1993GB13000下文有详细介绍对GB2312-1980的扩展英文全称Chinese Internal Code Specification)。
2.
不过收录了GB13000.1-1993全部字符的GBK虽然是基于GB2312-1980进行的扩展但在编码方式上与GB2312-1980并不完全相同与为了跟国际标准ISO/IEC 10646接轨的GB13000.1-1993更是完全不同。
虽然GBK跟GB2312一样是双字节编码但GBK只要求第一个字节即高字节大于127就固定表示这是一个汉字的开始(即GBK编码高字节的首位必须是10~127当然表示的还是ASCII字符)不再像GB2312一样要求第二个字节即低字节也必须大于127(即GBK编码低字节首位既可以是0也可以是1)。
正因为如此作为同样是双字节编码的GBK才可以收录比GB2312更多的字符。
GBK字符集向后完全兼容GB2312同时还支持GB2312-1980不支持的部分中文简体、中文繁体、日文假名(不过这个编码不支持韩国文字也是其在实际使用中与Unicode编码相比欠缺的部分)共收录汉字21003个、符号883个并提供1894个造字码位简、繁体字融于一体。 GBK的编码框架(Code Scheme)其中GBK/1收录除GB2312字符外的其他增补字符GBK/2收录GB2312字符GBK/3收录CJK字符GBK/4收录CJK字符和增补字符GBK/5为非中文字符UDC为用户自定义字符
3.
微软早在Windows 95简体中文版中就采用了GBK编码也就是对微软内部之前的代码页936(即Code Page 936简写为CP936)进行了扩展之前CP936和GB2312-1980几乎一模一样。代码页后文有详细介绍
微软的CP936通常被视为等同于GBK连IANA(Internet Assigned Numbers Authority互联网号码分配局)也将“CP936”视作“GBK”的别名。
但事实上比较起来GBK定义的字符较CP936多出了95个(15个非汉字及80个汉字)都是当时没有收入ISO/IEC 10646 (即UCS) / Unicode的字符。UCS、Unicode后文有详细介绍 四、GB18030
1.
中国国家质量技术监督局于2000年3月17日推出了GB18030-2000标准以取代GBK。GB18030-2000除保留全部GBK编码汉字之外在第二字节再度进行扩展增加了大约一百个汉字及四位元组编码空间。
GB18030《信息交换用汉字编码字符集基本集的补充》是我国继GB2312-1980和GB13000-1993之后最重要的汉字编码标准是我国计算机系统必须遵循的基础性标准之一。
2.
2005年GB18030编码方案在GB18030-2000的基础上又进行了扩充于是又有了GB18030-2005《信息技术中文编码字符集》。
如前所述GB18030-2000是GBK的升级版本它的主要特点是在GBK基础上增加了CJK中日韩统一表意文字扩充A的汉字而GB18030-2005的主要特点是在GB18030-2000基础上又增加了CJK中日韩统一表意文字扩充B的汉字。
微软也为GB18030定义了专门的代码页CP54936但是这个代码页实际上并没有真正使用(在Windows 7的“控制面板”-“区域和语言”-“管理”-“非Unicode程序的语言”中没有提供选项在Windows cmd命令行中可通过命令chcp 54936更改之后在cmd中可显示中文但却不支持中文输入)。 五、GB13000
1.
在所有的GB编码方案中除了逐步扩展并保持向下兼容的GB2312、GBK、GB18030等GB系列编码方案还有一个与GB2312、GBK、GB18030等GB系列编码方案不兼容的、特殊的GB编码方案——GB13000编码方案。(注意虽然GBK的制定主要目的就是为了收录GB13000中的所有字符但GBK的编码方式与GB13000是完全不同的。因此习惯上所称的GB系列编码方案一般并不包括GB13000在内。)
为了对世界各个国家和地区的所有字符进行统一编码以实现对世界上所有字符在计算机上的统一处理国际标准化组织制定了新的编码标准——ISO/IEC 10646标准(即Universal Character Set通用字符集简称UCS与统一联盟制定的Unicode标准兼容两者的关系详见后文)。
该标准第一次颁布是在1993年当时只颁布了其第一部分即ISO/IEC 10646.1:1993除了收录了世界上其他文字字符之外其中也收录了中国大陆、台湾、日本及韩国的汉字总共20,902个。
2.
为了与国际标准接轨中国于是制定了与ISO/IEC 10646.1:1993标准相对应的中国国家标准——GB13000.1-1993《信息技术通用多八位编码字符集(UCS)第一部分体系结构与基本多文种平面》。
2010年又发布了其替代标准——GB13000-2010《信息技术通用多八位编码字符集(UCS)》此标准等同于国际标准ISO/IEC 10646:2003《信息技术通用多八位编码字符集(UCS)》。
GB13000与国际标准ISO/IEC10646及Unicode标准目前在基本平面(即BMP详见后文)上基本保持一致。 各汉字(中文字符)编码方案之间的关系Big5为繁体汉字编码方案主要通行于港澳台地区本文不作详细介绍 六、CJK中日韩统一表意文字
1.
CJK指的是中日韩统一表意文字(CJK Unified Ideographs)也称统一汉字(Unihan)目的是要把分别来自中文(包含壮文)、日文、韩文、越文中起源相同、本义相同、形状一样或稍异的表意文字在Unicode标准及ISO/IEC 10646标准内赋予相同的码点值。(Unicode标准及ISO/IEC 10646标准后文有详细解释)
CJK是中文(Chinese)、日文(Japanese)、韩文(Korean)三国文字英文首字母的缩写。顾名思义它能够支持这三种文字但实际上CJK能够支持包括中文(包含壮文)、日文、韩文、越文在内的多种亚洲双字节文字。
2.
所谓“起源相同、本义相同、形状一样或稍异的表意文字”主要为汉字包括繁体字、简体字但也有仿汉字包括方块壮字、日本汉字(漢字かんじ)、韩国汉字(漢字한자)、越南的喃字(?喃Chữ Nôm)与儒字(?儒Chữ Nho)等。
此计划原本只包含中文、日文及韩文中所使用的汉字和仿汉字统称中日韩(CJK)统一表意文字(Unified Ideographs)。后来此计划才加入了越南文(Vietnamese)的喃字所以又合称为中日韩越(CJKV)统一表意文字。 七、小结
1.
GB类字符集均属于双字节字符集DBCS(Double Byte Character Set)。
(注意这里的“GB类字符集”指的是除了单字节编码的ASCII字符之外的部分因此属于狭义严格来讲广义上的“GB类字符集”包括了单字节编码的ASCII字符以及双字节编码的非ASCII字符因此广义上的GB类字符集属于单字节与双字节混合字符集。在一段表述中具体指的是狭义还是广义需根据上下文而定。)
基于DBCS的编码方案里最大的特点是两字节长的中文字符和一字节长的英文字符(ASCII字符)完全兼容可以并存于同一个文件内。
2.
因此在使用基于DBCS的编码方案的年代写程序时为了支持中文处理必须要注意字符串里的每一个字节的值如果这个值是大于127的那么就认为一个双字节字符集里的字符出现了。
使用GB类编码方案时一般都要时刻记住一个汉字由两个字节组成(即一个汉字占用的存储空间相当于两个英文字符所占用的存储空间)。 【预告下一篇将重点剖析非常容易令人困惑的简体汉字编码中的区位码、国标码(交换码)、内码(机内码)、外码(输入码)、字形码(输出码)的区别及关系敬请关注】