
对比UTF-8为什么GBK在国内更常用?
UTF8国际通用为什么还要用GBK? UTF8是国际编码,它的通用性比较好,外国人也可以浏览国内网站; GBK是国内编码,其中gb2312针对简体汉字,通用...
UTF8国际通用为什么还要用GBK?
UTF8是国际编码,它的通用性比较好,外国人也可以浏览国内网站;
GBK是国内编码,其中gb2312针对简体汉字,通用性比UTF8差,但有其使用空间;
UTF-8是8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部分修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。
GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995年12月15日联合以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。2000年已被GB18030-2000《信息交换用 汉字编码字符集 基本集的扩充》国家强制标准替代。2005年GB18030-2005发布,替代了GB18030-2000。
网上看到这样一条提示:如果您的网站客户群体主要是面向国内用户的,建议使用GBK版本,因为它可以节省空间,及相对utf-8版本来讲稳定一些。
GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。其实GBK版本与UTF-8版本功能是一样的.只不过编码方式不同。
GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。
至于UTF-8编码,它是变长的,用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的网站则用UTF-8节省空间。
UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所以可以看出unicode是给出一个字符的范围,定义了这个字是码值是多少,至于具体的实现方式可以有多种多样来实现。
UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。 如表:
字节1字节0xxxxxxx2字节110xxxxx10xxxxxx3字节1110xxxx10xxxxxx10xxxxxx4字节11110xxx10xxxxxx10xxxxxx10xxxxxx5字节111110xx10xxxxxx10xxxxxx10xxxxxx6字节1111110x10xxxxxx10xxxxxx10xxxxxx
因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。 实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。 因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。
GBK字符有一字节和双字节编码,00–7F范围内是第一个字节,和ASCII保持一致,此范围内严格上说有96个文字和32个控制符号。之后的双字节中,前一字节是双字节的第一位。总体上说第一字节的范围是81–FE(也就是不含80和FF),第二字节的一部分领域在40–7E,其他领域在80–FE。具体来说,定义的是下列字节:
GBK的编码范围
范围第1字节第2字节编码数字数水准GBK/1A1–A9A1–FE846717水准GBK/2B0–F7A1–FE6,7686,763水准GBK/381–A040–FE (7F除外)6,0806,080水准GBK/4AA–FE40–A0 (7F除外)8,1608,160水准GBK/5A8–A940–A0 (7F除外)192166用户定义AA–AFA1–FE564用户定义F8–FEA1–FE658用户定义A1–A740–A0 (7F除外)672合计:23,94021,886
总的来说,历史原因是一个因素。UTF8是逐渐推广开来的,现在还在交替的阶段。另一方面也有现实的考量。GBK相较UTF8,数据库存储空间要省一些。UTF8则在国际化上比GBK要好。我不同意“网络传输中utf-8编码比起其他的编码方式能省一些带宽”的说法。大家英文兼容ASCII,都是一个字节,并没有谁比谁省的说法。而中文UTF8大多是三字节,有时候比三字节还要多,而GBK都是2字节。 在带宽贵如油的上古时代,GBK可以节约不少的带宽。是中文站点的首选。在这个阶段,GBK大行其道,很多源码初版就是GBK的。但是UTF-8可以支持更多的汉字,在某些功能性的论坛或者站点,不可避免的要用到。用GBK就不太合适了。