Windows为什么用GBK而不是UTF-8
9x沿用了DOS的文字编码方式,是基于当前locale的ANSI代码页,对于zh_cn来说,这个代码页是GBK(GB2312的超集)
NT内核的Windows采用的是UCS-2 LE(UCS-2和UTF-16还是有少许区别的,参见:UTF-16),通常情况下,Windows下的程序员会把这种编码称为Unicode
所以NT为了代码级兼容,涉及到文本处理的Windows API会有两套,后缀分别是A(nsi)和W(idechar),通过UNICODE宏来区分使用哪一个。Ansi版本的API绝大多数的实现,是在W版本的API外面套了一层壳。假如Windows有一天需要采用UTF-8作为内码,那么我估计按微软的尿性,就只能再开一套新接口来做兼容了,这必然是没有意义并且浪费时间的(如果哪天微软因为什么奇葩原因不得不改,当我没说这句吧)。这段算是回答题主的问题。
继续跑题,以我了解到的知识来看,如果是纯Windows客户端开发,应该是没有必要转换成UTF-8的,直接使用Unicode存储就够了。当需要跟服务端通信时,由于后端通常采用Linux系统,所以必须存在一个转换过程。转换使用UTF-8的理由大致有以下两个:
1.大部分情况下,需要传输的数据以0-255区间的字符(英文字母、数字、半角标点符号)为主,所以虽然UTF-8编码的汉字需要3-6个字符,但仍然可以有效减少传输量。
2.很多优秀的开源组件是没有过多考虑这个问题的,对于一个英语世界的程序员来说,最简单的实现方法就是采用UTF-8编码,一了百了。这也意味着我们在使用这些组件的时候,需要转换成UTF-8
区别:
1、GBK 兼容GB 2312 编码,为GB 2312 的升级版本。
2、GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地也采用此编码。
charset=gbk
GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995年12月15日联合以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。
charset=gb2312
《信息交换用汉字编码字符集》是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB 2312—1980。
GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!