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