一、为什么需要字符编码?
啥意思,就是不同国家为了需求整出 ASCII、OME、DBCS、GBK,然后即出现了 Unicode。
二、各种编码
1、单字节编码:
ASCII字符集由95个可打印字符(0x20-0x7E)和33个控制字符(0x00-0x19,0x7F)组成。
OME:0x00~0x7F这个范围的解释基本是相同的,而对于后半部分0x80~0xFF的解释却不一定相同。(最终导致词不达意)
2、多字节编码方式:(为了落后的亚洲国家使用)保持和ASCII字符集的兼容
编码有:DBCS
GB2312:涵盖了所有简体字符以及一部分其他字符;(最常用)
GBK(K代表扩展的意思):在GB2312的基础上加入了对繁体字符等其他非简体字符(GB18030字符集不是双字节字符
集)。这两个字符集的字符都是使用1-2个字节来表示
三、解码
解码方式:查表操作就可以完成编解码的过程
解码方式:根据第一个字节来选择不同的码表进行解析,然后在去查表
四、日常生活的编码。
1、是怎么区分简体和繁体的?
Windows系统采用936代码页来实现对GBK字符集的编解码。在解析字节流的时候,如果遇到字节的最高位是0的话,那么就使用936代码页中的第1张码表进行解码,这就和单字节字符集的编解码方式一致了。
2、我们现在用的是啥码制?
我们现在通常说到ANSI编码,通常指的是平台的默认编码,例如英文操作系统中是ISO-8859-1,中文系统是GBK。
为啥我们可以在不同的机器厂整不同的语言?
因为unicode。
3、乱码原因是啥?
造成乱码的原因就是因为使用了错误的字符编码去解码字节流。
五、啥是unicode编码?
Unicode字符集涵盖了目前人类使用的所有字符,并为每个字符进行统一编号,分配唯一的字符码(Code Point)。Unicode字符集将所有字符按照使用上的频繁度划分为17个层面(Plane),每个层面上有216=65536个字符码空间。(意思是我们只用到plan0呗)、
六、unicode编码都有什么?
UCS-2/UTF-16:使用2个字节来表示,并且编码得到的结果完全一致。不同之处在于,UCS-2最初设计的时候只考虑到BMP字符,因此使用固定2个字节长度,也就是说,他无法表示Unicode其他层面上的字符,而UTF-16为了解除这个限制,支持Unicode全字符集的编解码,采用了变长编码,最少使用2个字节,如果要编码BMP以外的字符,则需要4个字节结对。
UTF-8、GB18030、gb2312,codepage936………
虽然每个字符在Unicode字符集中都能找到唯一确定的编号(字符码,又称Unicode码),但是决定最终字节流的却是具体的字符编码。
来举个例子:对Unicode字符“A”进行编码,UTF-8字符编码得到的字节流是0x41,而UTF-16(大端模式)得到的是0x00 0x41;啥意思呐,别整这么专业,就是在你妈叫你狗蛋,你爹叫你,傻缺。但是你爹你娘是一家人(一家人就是unicode,你就是A)。
什么是字符集,字符码、字符编码、代码页?待续……