什么是字符
字符是所有文字和符号的总称
什么是字符集
字符集是所有字符的集合,包含字符及字符的编码(在字符集中的序号)
常见字符集
ASCII
通用单字节编码系统,等同于国际标准ISO 646,包含了英文、阿拉伯数字、西文符号以及一些控制字符,如回车键、空格等,用7位表示一个字符,共128字符,后来扩展到8位,共256字符。
ASCII本身即是字符集,又是字符编码,ASCII直接将字符在编码字符集中的序号作为字符在计算机中存储的二进制数值,如:在ASCII中A在表中排第65位,序号是65,而编码后A的数值是0100 0001,也即十进制的65的二进制转换结果。
GB2312
GB2312是中文特有的字符集,有2万多个字符,前128个和ASCII保持一致,因此能兼容ASCII,ASCII码用1个字节表示,中文用2个字节表示。GBK是在GB2312基础上扩容而来的。GB18030是GBK的超集,包含中日韩所有字符
Unicode
Unicode则是为了让全球能用上统一的字符集而发明的,有6万多个字符,每个字符占2个字节,比如英文a,ASCII是97、Unicode则是0097(示意的说法)。中文只收录最常用的6000多个汉字。Unicode虽然是大一统的标准,但是在表示英文时浪费空间,并且许多古老的程序只支持ASCII,Unicode从标准设计上来说是不兼容ASCII,正因如此在实际使用中Unicode会以UTF-8,UTF-16等编码方式存储和传输。UTF-8保持和ASCII一致,UTF-8是可变长编码,英文使用1个字节,其他字符使用2-6个字节,比如中文多数是3个字节。
总结
字符集和编码的区别
ASCII、Unicode、GB2312等都是字符集,用于定义编号指代的字符。UTF-8,UTF-16则是Unicode的编码格式。Unicode只是一个用来映射字符和数字的标准,Unicode并不告诉你字符是怎么编码成字节的。这是被编码方案决定的,通过UTF来指定。
UTF-8是针对Unicode的一种可变长编码方案,UTF-8有如下特点:
a.可变长编码,由第一个字节决定该字符编码长度
b.向下兼容ASCII码(这也是为什么用UTF-8编码可以完美打开ASCII文本文件)永远记得通过Content-Type或者meta charset标签来显式指定你的文档的编码。这样浏览器就不需要猜测你使用的编码了,他们会准确的使用你指定的编码来渲染文档。
推荐阅读:http://www.freebuf.com/articles/others-articles/25623.html
https://www.cnblogs.com/developerY/p/3575271.html