字符集及字符编码(转载)
字符集(charset)是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国文字、标点符号、图形符号、数字等。
字符编码(charset encoding)是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表、音节表)与其他东西的一个集合(如号码或电脉冲)进行配对,即在字符集合与数字系统之间建立对应关系。通常人们用符号(一般情况下是文字)来表达信息,而以计算机为基础的信息处理系统则是利用元件(硬件)的不同状态的组合来存储和处理信息。元件的不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数字
常用字符集和字符编码:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、unicode字符集等。计算机若要准确处理各种字符集文字就需进行字符编码以便计算机能够识别和存储各种文字。
ASCII(American Standard Code for Information Interchange)字符集主要包括控制字符(回车、换行、退格等)和可显示字符(英文小写字符、阿拉伯数字、西文字符)。最大缺点:只能显示现代美国英语,因此苹果系统已经抛弃ASCII而转用Unicode。
GB2312规定:一个小于127的字符意义与ASCII相同,但两个大于127的字符连在一起时,就表示汉字,前一字节(高字节)从0xA1到0xF7,后一字节(低字节)从0xA1到0xFE。在这些编码里,把数字符号、罗马希腊的字母、日文的片假名都编入了,连ASCII原有的数字、标点、字母统统重新编了两个字节的编码,即常说的“全角”字符,而原来127以下的就叫“半角”字符。GB2312基本满足了计算机处理需求,它所收录的汉字覆盖中国大陆99.75%的使用频率。对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致后来的GBK即GB18030汉字字符集的出现。GB2312-80只收录6763个汉字。
GBK,微软利用GB2312-80未使用的编码空间,收录GB13000.1-93全部字符制定了GBK编码。
GB18030-2005与GB2312-80(也写作GB2312-1980)完全兼容,与GBK基本兼容,支持GB13000及Unicode的全部统一汉字,共收录汉字72044个。与UTF-8相同,采用多字节编码,每个字可由1、2、4个字节组成。此规格为中国境内所有软件产品支持的强制规格。
BIG5字符集及编码,BIG5又称大五码或五大码,是使用繁体中文社区中最常用的汉字字符集标准,BIG5是一套双字节字符集。
Unicode编码系统为表达任意语言的任意字符而设计。使用4个字节来表达每个字母、符号或表意字符,每个数字代表唯一的至少在某种语言中使用的符号。Unicode基于通用字符集(Universal Character Set)的标准来发展,是业界的一种标准,使电脑得以体现数十种文字。可以这样理解:Unicode是字符集,UTF-32/UTF-16/UTF-8是3种字符编码方案。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码(变长码),也是一种前缀码,它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,使得原来处理ASCII字符的软件无须或只需很少改动就可继续使用。UTF-8优点:UTF-8是ASCII的一个超集,因为一个纯ASCII字符串也是一个合法的UTF-8字符串;UTF-8和UTF-16都是XML文档的标准编码格式;UTF-8字符串可以由一个简单的算法识别出来,及一个字符创在任何其他编码中表现为合法的UTF-8的可能性很低,并随字符串长度增长其可能性减小。UTF-8缺点:因为每个字符可能使用不同的数量的字节编码,所以寻找串中第N个字符是一个O(N)复杂度的操作,即穿越长,则需要更多的时间来定位特定的字符,同时还需未变换来把字节解码为字符或字符编码为字节。