字符集
⼀些重要的字符集 不幸的是,这个世界太⼤了,不同的⼈制定出了好多种字符集,它们 表示的字符范围和⽤到的编码规则可能都不⼀样。我们看⼀下⼀些常 ⽤字符集的情况:
ASCII字符集 共收录128个字符,包括空格、标点符号、数字、⼤⼩写字⺟ 和⼀些不可⻅字符。由于总共才128个字符,所以可以使⽤1个 字节来进⾏编码,我们看⼀些字符的编码⽅式: 'L' -> 01001100(⼗六进制:0x4C,⼗进制:76) 'M' -> 01001101(⼗六进制:0x4D,⼗进制:77)
ISO 8859-1字符集 共收录256个字符,是在ASCII字符集的基础上⼜扩充了128 个⻄欧常⽤字符(包括德法两国的字⺟),也可以使⽤1个字节来 进⾏编码。这个字符集也有⼀个别名latin1。
GB2312字符集 收录了汉字以及拉丁字⺟、希腊字⺟、⽇⽂平假名及⽚假名字 ⺟、俄语⻄⾥尔字⺟。其中收录汉字6763个,其他⽂字符号 682个。同时这种字符集⼜兼容ASCII字符集,所以在编码⽅ 式上显得有些奇怪: 如果该字符在ASCII字符集中,则采⽤1字节编码。 否则采⽤2字节编码。 这种表示⼀个字符需要的字节数可能不同的编码⽅式称为变⻓ 编码⽅式。⽐⽅说字符串'爱u',其中'爱'需要⽤2个字节进 ⾏编码,编码后的⼗六进制表示为0xCED2,'u'需要⽤1个字节进⾏编码,编码后的⼗六进制表示为0x75,所以拼合起来就 是0xCED275。
⼩贴⼠: 我们怎么区分某个字节代表⼀个单独的字符还是代表某个字符 的⼀部分呢?别忘了`ASCII`字符集只收录128个字符,使 ⽤0~127就可以表示全部字符,所以如果某个字节是在0 ~127之内的,就意味着⼀个字节代表⼀个单独的字符,否则 就是两个字节代表⼀个单独的字符。
GBK字符集 GBK字符集只是在收录字符范围上对GB2312字符集作了扩充, 编码⽅式上兼容GB2312。
utf8字符集 收录地球上能想到的所有字符,⽽且还在不断扩充。这种字符 集兼容ASCII字符集,采⽤变⻓编码⽅式,编码⼀个字符需要 使⽤1~4个字节,⽐⽅说这样: 'L' -> 01001100(⼗六进制:0x4C) '啊' -> 111001011001010110001010(⼗六进 制:0xE5958A)