Ansi、GB2312、GBK、Unicode(utf8、16、32)

关于ansi,一般默认为本地编码方式,中文应该是gb编码

他们之间的关系在这边文章里描写的很清楚;http://blog.csdn.net/ldanduo/article/details/8203532/

其中Unicode可以在百度百科中得到详细信息,及所有国家文字编码地址;http://baike.baidu.com/view/40801.htm

另Utf8、16、32只是usc的一种存储传输方式,可以说是usc的具体实现;

utf8:

采用逐个字节编码,asci内容继续使用,即继续使用一个字节来存储(最高位为0),如果是汉字及其他,则采用3、4个字节来存储,用第一个字节的高位1的个数来表示接下来几个字节代表一个汉字(包含第一个字节),高字节如果为10则表示不是字符第一个字节,第一字节只能是0、11、111及其他;具体用几个字节来存储字符,可以根据usc字符的位置经过换算来转换成utf8格式,utf8两字节可以表示11位,三字节可以表示16位;

0——7F:表示原来的asci字符,1字节存储;

11011111 10111111:最高位1的个数表示几个字节来代表一个字符;(可表示11位长度数据)

11101111 10111111 10111111:三字节;(可表示16位长度数据)

utf16:

可以简单的认为完全按照usc-2方式来存储数据的,即所有字符都是按照两个字节来存储;

utf32:

usc-4是所有字符都是按照4字节来编码的,但是这个编码会很浪费空间,UTF-32 是一个 UCS-4 的子集,使用32-位元的码值,只用0到10FFFF的字码空间。

这里补充一下usc-4的编码知识:usc-4如果去掉前两个字节就是usc-2;

UCS-4根据最高位为0的最高字节分成27=128个group。每个group再根据次高字节分为256个平面(plane)。每个平面根据第3个字节分为256行 (row),每行有256个码位(cell)。group 0的平面0被称作BMP(Basic Multilingual Plane)。如果UCS-4的前两个字节为全零,那么将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。每个平面有216=65536个码位。Unicode计划使用了17个平面,一共有17×65536=1114112个码位。

GB2312、GBK:

兼容ansi,即用一个字节表示英文字符;

汉字则采用两个字节来表示。

GB2312第一个字节值范围为0xA1-0xF7,第二个字节范围0xA1-0xFE;

GBK第一个字节范围0x81-FE,第二个字节值的范围为0x40-0xFE;

USC-2汉字范围为0x4E00-0x9FBF;

原文地址:https://www.cnblogs.com/hejoy91/p/5019960.html