字符集指的是什么?
字符集是一个人为的规定,人们用一个小册子规定好“文字字符”与“数字”的对应关系。
其中,每一个字符对应的数组也称其为编码。
例如,ASCII码表就是一个字符集
char 'A' = 65,A的编码为65
char '0' = 48,0的编码为48
字符集是由一些组织制定和发布的,如ISO/IEC就负责制定字符集。
每一个字符集都有一个标准编号,如ASCII字符集的编号为ISO/IEC 646。
【拉丁字符集(Latin)】
拉丁字符集:收录了欧洲各个国家的字符。例如,希腊字母, Α α, Β β
拉丁字符集的编号为ISO 8859系列
例如:ISO8859-1字符集,也就是 Latin-1,是西欧常用字符,包括德法两国的字母。
ISO8859-2字符集,也就是 Latin-2,收集了东欧字符。
注意:拉丁字符总数超过了256个,无法用一个char型表示,需要用2个字节。
所以即使不使用中文,外文字母的表示也有问题。
char a='α';//有问题
问题原因:无法用一个字节表示一个字符。
char str[]="α β";//五个字节存储->sizeof(str)
【中文字符集】
GB2312 中文简体国标码(汉字数:6763)
GBK 扩展中文GB编码(兼容GB2312)
GB18030 用1-4个字节编码,容量超大
BIG5 中文繁体编码
CJK 中日韩大字符集编码
Unicode 统一码,用0-0x10FFFF映射全球各国的语言文字。
【GB2312/GBK】
双字节编码,每个字节的高位为1
不包含生僻字
对于人名、古汉语等方面出现的罕见字,GB2312不能处理,这导致了后来GBK以及GB 18030汉字字符集的出现
GBK兼容了GB2312,较为常用。
【Unicode】
国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
0-0x10FFFF(最多1114112个字符)
【问题】Unicode用几个字节来表示一个字符?
第一种方案:UFT-32编码
每个字符用一个int来表示
特点:简单,但太浪费空间
第二种方案:UTF-16编码
特点:用1-2个short来表示一个字符
第三种方案:UTF-8编码
用1-4个字节来表示一个字符(比较节省空间)