UTF-8与GBK字符集解析

 我来答
青柠姑娘17
2022-07-20 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6544
采纳率:100%
帮助的人:37万
展开全部

简单来说,Unicode就是给世界上存在的字符都赋予唯一的二进制编码。

因为Unicode要编码所有可能的字符,那么每个字符占用的字节长度就会变多。以英文为例,一个英文字符使用ASCII码只需要一个字节,而用Unicode需要4个字节,甚至更多。并且前面的字节都是0。这样纯英文文件的存储大小就会成倍扩大,是极大的浪费。

一种变长的编码方式,基于Unicode的一种实现。它使用1--4个字节表示一个字符,根据不同的字符变化字节的长度,可以节省空间。编码规则如下:

根据上表可以看出,UTF-8剩余可以填的位数,决定了对应Unicode编码的范围。 下面举个转换的例子:
"樊" 的unicode是6A0A(0110 1010 0000 1010),查表可知,6A0A属于第三行的范围,因此"樊"的UTF-8编码需要三个字节,即格式是 1110xxxx 10xxxxxx 10xxxxxx 。然后,从6A 0A的最后一个二进制位开始,从后向前填入格式中的x,多出的位补0。最终,"樊"的UTF-8编码是11100110 10101000 10001010(E6 A8 8A)
由此可以总结出字符用UTF-8编码的规律:

注: UTF-8并没有编码所有的Unicode的字符,只包含了第0号平面(plane)和部分1号平面的字符。这属于更深层次的探究,感兴趣的读者可以通过 UTF-8 与 Unicode字符平面映射 了解。

该字符集使用2个字节表示一个字符。简单地理解,一个小于127的字节的意义与ASCII码相同,但两个大于127的字节连在一起时,就是GB2312编码的字符。以下是两个字节的具体范围:
第一个字节的范围是0xA1(161)–0xF7(247) ; 第二个字节的范围是0xA1(161)–0xFE(254)
共收录了6763个汉字,还包括拉丁字母、希腊字母、日文字符。并对 ASCII 里已有的数字、标点、字母赋予了两个字节的编码,这就是”全角”字符,而小于127的就称为”半角”字符。

由于GB2312仅包含了常用汉字,没有编码生僻字以及繁体字,GBK就对其进行了扩展。简单地理解,只要第一个字节大于127,不管后面的字节是否大于127,就是GBK编码的字符。以下是两个字节的具体范围:
第一个字节的范围是0x81(129)–0xFE(254) ; 第二个字节范围一部分在0x40(64)–0x7E(126),另一部分在0x80(128)–0xFE(254)
这样扩展之后的编码方案被称为 GBK 标准,GBK包括了GB2312 的所有内容,提供了23940个编码,使用了21886个。

UTF-8编码汉字通常需要三个字节,而GBK只需要两个字节,所以对于纯中文、不考虑国际化,且对流量和存储大小比较敏感的应用,可以使用GBK编码节省存储空间和传输流量。

原 博文 发布在个人博客,欢迎访问!!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式