• 字符编码详解


    1. 标准ASCII编码

    1.1 编码规范

    	由美国国家标准局(ANSI)制定(American Standard Code for Information Interchange,称为ISO 646标准。
    采用7位码进行编码,表示128个字符。
    最高位(b7)用作奇偶校验位。
    

    2. ANSI编码

    中文的ANSI默认是使用gb2312编码。
    测试: 在windows建一个txt,保存时选字体格式!
    
    在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。 
    当然对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ASNI编码与Unicode编码之间最大也最明显的区别。
    

    3. unicode

    3.1 介绍

    	Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符。编码从U+0000至U+FFFF。
    	比如汉字"经"的编码是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个字节来编码字符,不过
    

    3.3 实现方式-存储

    	一个字符的Unicode编码是确定的。但是在实际传输过程中,以及出于节省空间的目的,不同平台对Unicode编码的实现方式有所不同。
    	Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format),简称为UTF。
    

    3.3.1 UTF-8

    是unicode的一种实现(存储)方式!
    UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
    

    3.3.1.1 编码方式

    规则很简单,只有二条:
    	1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
    	2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
    下表总结了编码规则,字母x表示可用编码的位。
    	Unicode符号范围 | UTF-8编码方式
    		(十六进制) | (二进制)
    	--------------------+---------------------------------------------
    	0000 0000-0000 007F | 0xxxxxxx
    	0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    	0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 		(汉字在这个范围中,都是转成3个字节)
    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    
    以汉字“严”为例,演示如何实现UTF-8编码。
    	已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),
    因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始
    ,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是E4B8A5。
    

    4. gb2312

    注:因缺少特殊字符,已被GBK和GB18030代替
    	GB2312或GB2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集--基本集》,
    由中国国家标准总局发布,1981年5月1日实施。通行于大陆、新加坡等地。几乎所有的中文系统和国际化的软件都支持GB2312。
    
    	GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB2312收录了包括拉丁字母、希腊字母、日
    文平假名及片假名字母、俄罗斯语西里尔字母在内的682个全形字符。
    	GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖99.75%的使用频率。
    对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。
    

    5. GBK

    	全名为汉字内码扩展规范(Chinese Internal Code Specification)。K 即是“扩展”所对应的汉语拼音(KuoZhan11)
    中“扩”字的声母。GBK 来自中国国家标准代码GB 13000.1-93。 
    	GBK 编码是GB2312编码的超集,向下完全兼容GB2312,同时GBK收录了Unicode 基本多文种平面中的所有CJK汉字。同 
    GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。 GBK还收
    录了GB2312不包含的汉字部首符号、竖排标点符号等字符。
    

    6. cp936

    cp936即 code page 936(代码页936)是windows以GBK(国标扩展字符集)为基础的编码。
    

    7. GB18030

    7.1 简介

    GB18030编码向下兼容GBK和GB2312,兼容的含义是不仅字符兼容,而且相同字符的编码也相同。
    GB18030收录了所有Unicode3.1中的字符,包括中国少数民族字符,GBK不支持的韩文字符等等,也可以说是世界大多民族的文字符号都被收录在内。
    

    7.2 编码方式

    GB18030编码是变长编码,有单字节、双字节和四字节三种方式。
    	GB18030 的单字节编码范围是0X00-0X7F,完全等同与ASCII;
    双字节编码的范围和GBK相同,高字节是0X81-0XFE,低字节的编码范围是0X40 -0X7E和0X80-0XFE;
    四字节编码中第一、三字节的编码范围是0X81-0XFE,二、四字节是 0X30-0X39。
    
    Windows中CP936代码页使用0X80来表示欧元符号,而在GB18030编码中没有使用0x80编码位,用其他位置来表示欧元符号。这可以理解为是 GB18030向下兼容性上的一点小问题;也可以理解为0X80是CP936对GBK的扩展,而GB18030只是和GBK兼容良好。
    

    8. ISO 8859编码-单字节字符集

    8.1 编码规则

    ISO8859 不是一个而是一系列的标准,这套字符集与编码系统的共同特色是,以同样的码位对应不同字符集。其基本精神是:
    	1.兼容ASCII,所以所有的低位皆不使用。
    	2.高位中的前 32 个码位 (0x80 -- 0x9F 或 128--159),保留给扩充定义的 32 个控制码,称为 C1 控制码 (0--31 称为 C0 控制码)。
    	3.高位中第 33 个码位 (0xA0 或 160),也就是对应 ASCII 中 SP (空格) 的码位,总是代表 Non-breakable space,也就是不准许折行的空格。
    	4.每个字符集定义至多 95 个字符,其码位都在 0xA1 -- 0xFF 或 161--255。
    	5.每个字符集收录欧洲某地区的共同常用字符。
    

    8.2 字符集介绍

    ISO8859-1 字符集,也就是 Latin-1,是西欧常用字符,包括德法两国的字母。
    ISO8859-2 字符集,也称为 Latin-2,收集了东欧字符。
    ISO8859-10 字符集,也称为 Latin-6 或 Nordic,收集了北欧 (主要指斯堪地那维亚半岛) 的字符。
  • 相关阅读:
    企业应用的互联网化
    企业应用开发平台GAP平台
    技术有什么用?
    Samba服务器配置
    IT从业人员需要知道的10个小秘密
    在雪豹10.6.2(Mac OS X)上安装Oracle10g
    项目经理的职责
    通过堡垒机远程连接Windows Server
    MySQL:Data truncated for column 'last_apply_time' at row 1
    当有莫名其妙的错误里, 可以
  • 原文地址:https://www.cnblogs.com/Desneo/p/7213932.html
Copyright © 2020-2023  润新知