一 、字符串编码分为四种
1.ASCII码
为建立英文字符和二进制关系所制定的编码规范,代表了128个字符,包括英文字符,阿拉伯数字,西文字符以及32个控制字符。用一个字节表示具体的字符,但后来只用7位来表示字符(2^7=128)。(一共8位且最前面那位为0) (0000 0000=>0111 1111)
扩展的ASCII码
欧洲部分国家语言中又拼音,7字节不够用。一些国家利用字节中闲置的最高位编入新的符号。这些国家使用的编码体系最多可表达256个字符。同时带来的问题是:不同国家有不同字母,都是用256个字符编码代表的字母依然不一样。例如。130在发育编码中代表了é,希伯来语中代表了字母Gimel (ג),俄语编码中又代表了另一个符号。但是所有编码在0-127表示的符号是一样的,不一样的只有128-255这段。由于此问题才诞生了Unicode编码。(1000 0000 =>1111 1111)
2.Unicode符号集
一开始是UCS-2字符集 最开始可表示2^16(65536字符)
UCS-4 2^36(43亿)
包含世界所有符号,且每个符号都独一无二。比如U+0639表示阿拉伯字母Ain,U+0041表示英文大写字母A,U+4E25表示汉字“严”。
Unicode其实是符号集(世界上所有符号的符号集),并不是新的编码方式。
3.UTF-8
由UCS-2 到UCS-4演变过来的
0x0000 0000 - 0x0000 007F : 0xxxxxxx
0x0000 0080 - 0x0000 07FF : 110xxxxx 10xxxxxx
0x0000 0800 - 0x0000 FFFF : 1110xxxx 10xxxxxx 10xxxxxx
0x0001 0000 - 0x0010 FFFF : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
例:王:0x0000 738B - 0000 0000 0000 0000 0111 0011 1000 1011 -1110 0111 1000 1110 1000 1011
0xe7 0x8e 0x8b
使用最广的编码方式,实际上是Unicode的实现方式。其他实现方式还包括UTF-16和UTF-32
特点:变长的编码方式。可使用1~4个字节表示符号,根据不同符号变化字节长度
规则:
1)单字节符号,字节第一位设为0,后面7位为这个符号的Unicode码。因此对于英文字母,UTF-8编码和ASCII码相同
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位设为10。剩下没有提及的二进制位,全部为这个符号的unicode码。
GBK = utf-8 会出现乱码
4 GBK/GB2312/GB18030
GBK和GB2312都是针对简体字的编码,只是GB2312只支持六千多个汉字编码,而GBK支持1万多个汉字编码。而GB18030是用于繁体字的编码。汉字存储时都是用两个字节来储存。
GB2312
94个区 0-09收录除汉字682个字符 10-15空白 16-55收录一级汉字,拼音排序 56-87收录二级汉字 部首笔画排序 88-94空白
例如 侃 的码位是 5709(57区0行9列) 转换16进制分别57 =>0x39 09=>0x09
0x39+0xA0=0xD9 0x09+0xA0=0xA9 (+A0的原因 就是+160 GB2312要向下兼容ASCII 所以是为了和ASCII做区分 高位和低位都是大于127的) 0xD90xA9
GBK
不再规定低位大于127
GB18030
少数民族