什么是字符
表示数据和信息的字母、数字或者其他符号。在电子计算机中,每个字符与一个二进制编码相对应
什么是字符集
顾名思义,字符集就是字符的集合,计算机中的字符集是指指定了编号的字符的集合。
组成字符集的要素
确定字符范围
首先要确定字符集包含那些字符
确定字符编号
给字符编号
编号转为编码
编码:将编号转为二进制数据形式,计算机只能存储二进制数据,要想与计算机交互需将人类定义的编号转为计算机可识别的二进制编码
确定解码码元
解码:将二进制数据转为人类可识别的字符,解码时要决定一次读取几位二进制来进行解码。这个概念就是码元。
常用字符集
ascii码
范围
128个字符,英文大小写,数字,标点,空格及不可见字符:制表符,换行符等等
编号
0-127
编码
直接将数字转为二进制
解码和码元
2的7次方=128 ,1字节是8位,采用单字节码元,高位补0
A=65=01000001
iso 8859系列
范围
这一系列是对ascii字符集的扩展,iso8859-1....16,也就是常见的latin-1.....16
ISO8859-1 字符集,也就是 Latin-1,是西欧常用字符,包括德法两国的字母。
ISO8859-2 字符集,也称为 Latin-2,收集了东欧字符。
ISO8859-3 字符集,也称为 Latin-3,收集了南欧字符。
ISO8859-4 字符集,也称为 Latin-4,收集了北欧字符。
ISO8859-5 字符集,也称为 Cyrillic,收集了斯拉夫语系字符。
ISO8859-6 字符集,也称为 Arabic,收集了阿拉伯语系字符。
ISO8859-7 字符集,也称为 Greek,收集了希腊字符。
ISO8859-8 字符集,也称为 Hebrew,收集了西伯莱 (犹太人) 字符。
ISO8859-9 字符集,也称为 Latin-5 或 Turkish,收集了土耳其字符。
ISO8859-10 字符集,也称为 Latin-6 或 Nordic,收集了北欧 (主要指斯堪地那维亚半岛) 的字符。
ISO8859-11 字符集,也称为 Thai,它是从泰国的 TIS620 标准字符集演化而来。
ISO8859-12 字符集,目前尚未定义。
ISO8859-13 字符集,也称为 Latin-7,主要函盖波罗的海(Baltic) 诸国的文字符号,也补充一些在 Latin-6 中遗漏的拉脱维亚 (Latvian) 字符。
ISO8859-14 字符集,也称为 Latin-8,它将 Latin-1 中的某些符号换成塞尔特语 (Celtic) 的字符。塞尔特族是指英伦外围的威尔斯人 (Welsh) 和盖尔人 (Gaelic)。
ISO8859-15 字符集,也称为 Latin-9,或者被匿称为 Latin-0,它将 Latin-1 中较少用到的符号删除,换成当初遗漏的法文和芬兰字母;还有,把英镑和日元之间的金钱符号,换成了欧盟货币符号。
ISO 8859-16,正式编号为ISO/IEC 8859-16:2001,又称Latin-10,这个字符集设计来涵盖阿尔巴尼亚语、克罗地亚语、匈牙利语、意大利语、波兰语、罗马尼亚语及斯洛文尼亚语等东南欧国家语言。 `
编号
ascii编号不变,新增的在160-255内
编码
编号直接转为二进制
解码和码元
单字节,2的8次方为256,可以包含。
gb2312
范围
伟大的中国人民发明的。没有收录ascii码表,包含汉字,拉丁字母,希腊字母,日本平假名片假名,俄语等
其中汉字6763个,其他语言682个
编号
包含字符太多,直接用编号不利于管理,采用了分区的方案,分成94个区,每个区94个字符
01-09 英文,10-15 空闲,16-55 一级汉字(3755),56-87 二级汉字(3008),88-94空闲
编码
在ascii中的就按ascii码表来编码,在gb2312中的就按gb2312编码,
为了避免0001 和ascii码表的01区分,使用以下方法来进行编码。
区码+160 转二进制,位码+160转二进制,然后拼接
解码和码元
解码时先读取一个字节,如果大于127,就直接读2个字节来解析,如果小于等于127则直接按ascii码解析
unicode
范围
世界上所有的字符,不断扩展中。。。
编号
引入平面的概念(plane),0-16(17个平面),每个平面包含65536个字符(0-65535)
编码
utf-8
兼容ascii,iso8859,单字节码元。
采用变长字节编码,0后面表示真正要解析的二进制字节码,高位的1代表占一个字节,
110代表占用2个字节,1110代表占用三个字节
uft-16
双字节为一个码元,变长字节编码,因为2个字节最多能表示65535,最多表示0号基本平面,
为了表示其余的平面,需要使用2个码元,于是引入了代理区的概念
规定了基本平面中的56320-57343这个区间的编号为代理区,这个区间的编号不对应字符。
第一个码元的取值范围是0xD800~0xDBFF(二进制为11011000 00000000 ~ 11011011 11111111,十进制为55296 ~ 56319),
第二个码元的取值范围为0xDC00~0xDFFF(二进制为11011100 00000000 ~ 11011111 11111111,十进制为56320 ~ 57343)。
根据上一步确定的码元的取之范围,可以得出它的二进制表现形式: 110110pp ppxxxxxx 110111xx xxxxxxxx 可以看到,它的有效编码位数只有20位,其中4位pppp代表该编码所在平面(1~16),16位xxxxxxxxxxxxxxxx代表在该平面的位置。
然后这有效编码位数的20位一共可以表示2的20次方,也就是1048576个编码,正好把16个平面的字符都表示完。
uft-32
直接将unicode编码转为二进制,4字节一个码元,高位补0,利用空间节省转换时间