ASCII码表
http://ascii.911cha.com/
ASCII码一共128个,用一个字节存储就可以。要表示全世界各种不同的符号则需要另外的编码,占用更多的字节。
unicode就是用来表示全世界符号的一种编码方案,是一套字符集。全称是"Universal Multiple-Octet Coded Character Set",简称UCS。
注意:unicode是符号集,定义一个符号在机器上的代号是多少。unicode是定长编码,所有字符是2个字节(UCS2)或者4个字节(UCS4),这样的编码对ASCII码来说是非常浪费内存的,所以就有了变长编码,如utf8,utf8是unicode的具体实现方式。
生活中经常遇到中文乱码的问题,就是因为你看到的乱码用当前的编码来识别是不对的。所以在互联网交流的时候用同一份编码就很重要,utf8就是一个非常广泛使用的unicode实现方式。utf8是变长的编码,存储长度为1到6个字节,一般ASCII码1个字节存储,中文3个字节存储。utf8是这样实现unicode的:
上面的n是字节长度,比如0~0x7F的符号(也就是ASCII码)在utf8用一个字节存储。“中”的unicode是4E2D(100111000101101),4E2D所在的范围用3个字节存储,存储方式是将100111000101101从后往前依次的填到上表第三行的xxxx中,前面不够的补0。最后的utf8的编码是111000100,10111000,10101101,十六进制就是E4 B8 AD。
BOM —— Byte Order Mark
unicode编码有字节序的问题,unicode在每个文件的开头有个“ZERO WIDTH NO-BREAK SPACE”字符用来表示编码字节序。前两个字节FEFF表示大端,FFFE表示小端。ZERO WIDTH NO-BREAK SPACE也叫被称为BOM。utf8是不需要表示字节序的,这时的BOM用来表示编码,utf8编码的标志是EF BB BF,utf8也可以不带BOM,如果不带BOM则没有这三个字节。
Big Endian, Little Endian
, utf8
utf8,utf16,utf32
UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。 规定存储方式的是UTF。utf8是变长的编码,utf16是两个字节代表一个字符,utf32是四个字节代表一个字符。
gbk
GBK是中文字符编码,包括简体和繁体。gb2312是中文简体编码。
参考:
http://www.cnblogs.com/94cool/archive/2012/06/20/2555655.html
http://blog.charlee.li/unicode-intro
http://blog.csdn.net/tge7618291/article/details/7599902