java编码表GBK、GB2312与UTF-8的区别

时间:2023-01-04 19:48:19

GBK、GB2312与UTF-8的区别?

一,先说下三者各自的定义。

UTF-8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。
是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码
UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。
如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。
GBK:是国家标准GB2312基础上扩容后兼容GB2312的标准。除了兼容GB2312外,它还能显示繁体中文,还有日文的假名
该编码共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。
GBK为了区分中文,将其最高位都设定成1。既一个中文两个字节的第一个字节为负数。
GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。
GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码;


GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

二,通过实例来说明。
GBK、GB2312与UTF-8对中文编码时分别使用多少个字节
如对"aA你"进行编码
编码                a  A  你
GB2312:97,65,-60,-29,
GBK: 97,65,-60,-29,
UTF-8: 97,65,-28,-67,-96,
通过上面可以看出:GBK、GB2312与UTF-8对英文字母都是用1一个字节表示,
对汉语:
GB2312:2字节  通常第一个字节都是负数
GBK: 2字节 通常第一个字节都是负数
UTF-8: 3字节
一般GBK、GB2312的两个字节都为负数,但是对一些不常见的汉字会有例外。
如对"aA琲"进行编码
编码                a  A  琲
GB2312:97,65,63,
GBK: 97,65,-84,105,
UTF-8: 97,65,-25,-112,-78,