最近遇到了一个编码转换的问题(GBK到UTF-8再到GBK会出现乱码),所以将我们使用到的一些编码相关的看了一下,包括了ASCII、Unicode、GBK、GB2312、UTF-8等。现在总结一下:
1、ASCII码。最原始的编码方式,使用7位进行编码。
2、由于ASCII使用的是7位,而一个存储单元是8位,所以有1位是空着的,这就给不同的OEM进行不同的扩展提供了基础。
3、ACSII比较完美的扩展方式是ISO 8859-1,也成为Latin-1,该字符集几乎覆盖了所有的西欧字符集。
4、由于亚洲很多国家的字符超过了127~255个数的限制,因此引入了双字节字符(DBCS)。
5、GB码(全称是GB2312-80),1980年发布,是简体中文汉字强制使用的编码方式。
6、GB2312收录了7445个字符,包括了6763个汉字和682个其他字符。
7、GBK。能够同时支持简体和繁体。兼容GB2312.
8、Unicode。针对各国文字采用的统一性编码,16位编码。Unicode编码下,中文和英文占用相同的空间,都是2个字节。Unicode不兼容ISO8859-1,属于定长编码。
9、UTF-8.为了解决使用Unicode进行编码英文造成的浪费(2个字节,创立了变长的UTF-8,使用1个自己来表示英文,3个字节来表示中文。
换个角度来看:
1、定长字符集:ISO8859-1(1个字节)、GB2312(2个字节)、GBK(2个字节)、Unicode(2个字节)
2、不定长字符集:UTF-8、GBK、GB2312
3、支持简体中文的字符集:GB2312、GBK、UTF-8、Unicode
4、支持繁体中文的字符集:GB12345-90、GBK、Big5、Unicode、UTF-8
5、由于Unicode是定长的,几乎覆盖所有的字符集,所以很多语言内部使用Unicode最为编码方式,比如Java。
6、对于字符集来说,优先使用utf-8
1、ASCII码。最原始的编码方式,使用7位进行编码。
2、由于ASCII使用的是7位,而一个存储单元是8位,所以有1位是空着的,这就给不同的OEM进行不同的扩展提供了基础。
3、ACSII比较完美的扩展方式是ISO 8859-1,也成为Latin-1,该字符集几乎覆盖了所有的西欧字符集。
4、由于亚洲很多国家的字符超过了127~255个数的限制,因此引入了双字节字符(DBCS)。
5、GB码(全称是GB2312-80),1980年发布,是简体中文汉字强制使用的编码方式。
6、GB2312收录了7445个字符,包括了6763个汉字和682个其他字符。
7、GBK。能够同时支持简体和繁体。兼容GB2312.
8、Unicode。针对各国文字采用的统一性编码,16位编码。Unicode编码下,中文和英文占用相同的空间,都是2个字节。Unicode不兼容ISO8859-1,属于定长编码。
9、UTF-8.为了解决使用Unicode进行编码英文造成的浪费(2个字节,创立了变长的UTF-8,使用1个自己来表示英文,3个字节来表示中文。
换个角度来看:
1、定长字符集:ISO8859-1(1个字节)、GB2312(2个字节)、GBK(2个字节)、Unicode(2个字节)
2、不定长字符集:UTF-8、GBK、GB2312
3、支持简体中文的字符集:GB2312、GBK、UTF-8、Unicode
4、支持繁体中文的字符集:GB12345-90、GBK、Big5、Unicode、UTF-8
5、由于Unicode是定长的,几乎覆盖所有的字符集,所以很多语言内部使用Unicode最为编码方式,比如Java。
6、对于字符集来说,优先使用utf-8