何为编码GBK和UTF8编码?GBK,GB2312与区位码有何关系?Tsingke

区位码是早些年(1980)中国制定的一个编码标准,如果有玩过小霸王学习机的话,应该会记得有个叫做“区位”的输入法(没记错的话是按F4选择)。就是打四个数字然后就出来汉字了,什么原理呢。请看下面的区位码表,每一个字符都有对应一个编号。其中前两位为“区”,后两位为“位”,中文汉字的编号区号是从16开始的,位号从1开始。前面的区号有一些符号、数字、字母、注音符号(台)、制表符、日文等等。

而GB2312编码就是基于区位码的,用双字节编码表示中文和中文符号。一般编码方式是:0xA0+区号,0xA0+位号。如下表中的“安”,区位号是1618(十进制),那么“安”字的GB2312编码就是0xA0+160xA0+18也就是0xB00xB2。根据区位码表,GB2312的汉字编码范围是0xB0A1~0xF7FE

通过上面的编码,可能大家注意到了,区位码里有英文和数字,按道理说是不是也应该是双字节的呢。而一般情况下,我们见到的英文和数字是单字节的,以ASCII编码,也就是说现代的GBK编码是兼容ASCII编码的。比如一个数字2,对应的二进制是0x32,而不是0xA30xB2。那么问题来了,0xA30xB2又对应到什么呢?还是2(笑)。注意看了,这里的2跟2是不是有点不太一样?!确实是不一样的。这里的双字节2是全角的二,ASCII的2是半角的二,一般输入法里的切换全角半角就是这里不同。

如果留意过早些年的手机(功能机),会发现人名中常见的“燊”字是打不出来的。为什么呢?因为早期的区位码表里面并没有这些字,也就是说早期的GB2312也是没有这些字的。到后来的GBK(1995)才补充了大量的汉字进去,当然现在的安卓苹果应该都是GBK字库了。再看看这些补充的汉字的字节码燊0x9F0xF6。和前面说到的GB2312不同,有的字的编码比0xA00xA0还小,难道新补充的区位号还能是负的??其实不然,这次的补充只补充了计算机编码表,并没有补充区位码表。也就是说区位码表并没有更新,用区位码打字法还是打不出这些字,而网上的反向区位码表查询也只是按照GBK的编码计算,并不代表字与区位号完全对应。时代的发展,区位码表早已经是进入博物馆的东西了。

补充:UTF8编码与Unicode编码

因为英文字符也全部使用双字节,存储成本和流量会大大地增加,所以Unicode编码大多数情况并没有被原始地使用,而是被转换编码成UTF8。下表就是其转换公式:

第一种:Unicode从0x0000到0x007F范围的,是不是有点熟悉?对,其实就是标准ASCII码里面的内容,所以直接去掉前面那个字节0x00,使用其第二个字节(与ASCII码相同)作为其编码,即为单字节UTF8。

第二种:Unicode从0x0080到0x07FF范围的,转换成双字节UTF8。

第三种:Unicode从0x8000到0xFFFF范围的,转换成三字节UTF8,一般中文都是在这个范围里。

第四种:超过双字节的Unicode目前还没有广泛支持,仅见emoji表情在此范围。

例如“博”字的Unicode编码是\u535a。0x535A在0x0800~0xFFFF之间,所以用3字节模板1110yyyy10yyyyxx10xxxxxx。将535A写成二进制是:0101001101011010,高八位分别代替y,低八位分别代替x,得到111001011000110110011010,也就是0xE58D9A,这就是博字的UTF8编码。

前面提到,GBK的编码里英文字符有全角和半角之分,全角为GBK的标准编码过的双字节2,半角为ASCII的单字节2。那现在UTF8是全部用一个公式,理论上只有半角的2的,怎么支持全角的2呢?哈哈,结果是Unicode为中国特色的全角英文字符也单独分配了编码,简单粗暴。比如全角的2的Unicode编码是\uFF12,转换到UTF8就是0xEFBC92。

那么这些库是怎么区分这些编码的呢?那就是词库,你会看到库的源码里有大量的数组,其实就是对应一个编码里的常见词组编码组合。同样的文件字节流在一个词组库里的匹配程度越高,就越有可能是该编码,判断的准确率就越大。而文件中的中文越少越零散,判断的准确率就越低。

文中多次提及ASCII编码,其实这应该是每个程序员都非常熟悉、认真了解的东西。对于嵌入式开发的人来说,应该能随时在字符与ASCII码中转换,就像十六进制与二进制之间的转换一样。标准ASCII是128个,范围是0x00~0x7F(00000000~01110000),最高位为0。也有一个扩展ASCII码规则,把最高位也用上了,变成256个,但是这个扩展标准争议很大,没有得到推广,应该以后不会得到推广。因为无论是GBK还是UTF8,如果ASCII字符编码最高位能为1都会造成混乱无法解析。

以GBK为例,如果ASCII的字符最高位也能是1,那么是应该截取一个解析为ASCII呢?还是截取两个解析为中文字符?这根本无法判断。UTF8也是同理,遇到0xxx开头则截取一个(即为标准ASCII),遇到110x开头则截取两个,遇到1110开头则截取三个,如果ASCII包含1开头的,则无法确定何时截取多少个。

在哪里还能一睹扩展ASCII的真容呢?其实很简单,只要把网页的meta改成ASCII就行了。又或者浏览器的编码选择“西方”,即可见到与平常所见不同的乱码。(截图为火狐)

THE END
1.执行标准GB4706,1—2005与执行标准GB4806,1—2005有什么区别吗您好!执行标准GB4706.1-2005和执行标准GB4806.1-2005都是中国国家标准,分别规定了家用和类似用途电器以及电动工具的安全要求。两个标准的主要区别在于适用范围和标准制定的时间。执行标准GB4706.1-2005主要适用于家用和类似用途电器,例如家用电器、办公设备、电动工具、娱乐设备等。该标准于2005年发布实施https://wen.baidu.com/question/763020922501843404.html
2.关于食品安全标准GB4706和GB4806来反馈一下小熊的是如图既有打扰下,看完有点懵,请问友友,所以这款美的白色,食品接触的地方都是 4806,其余是4706是吗 赞 回应 牡丹花开红艳艳 2022-01-12 14:59:42 我之前做过家电GB4706的检测,基本上就是电器本身运行时的标准,有没有着火,有没有安全断电这些的,据我所做过的实验,4706是没有关于食品接触相关。4706和4806的实验应https://www.douban.com/group/topic/255657103/
3.饭盒在国内销售需要做GB4806食品级检测报告吗电饭盒在国内销售,需要有贝斯通检测第三方实验室出具的CNAS和CMA质量检测报告 电饭盒质量检测报告测试标准GB4806/GB4706 电饭盒质量检测报告测试周期5个工作日 电饭盒质量检测报告准备详细资料:说明书,申请表,测试样机https://www.ssoocc.com/65311.html
4.厨房用品用具商城质检报告GB4806食品级测试认证邦阅网4.灶具等厨用小家电:家用净水器,电热壶,电热杯,微波炉,多士炉,烤炉,饮水机,烤箱,电饭锅,电饭煲等; 5.保温容器:热水瓶,保温杯,保温壶,保温瓶,保温桶等。 注: 厨房电器除了需要做本文所介绍的食品接触材料测试方面的检测报告外,还需要对应类目申请GB4706检测报告或CCC强制性认证。https://www.52by.com/article/114057
5.GB/T41427GB/T 41427-2022家用电器质量安全 生产过程状态监测与评价指南.pdf,ICS13.120 CCSY60 中华人 民共和 国国家标准 / — GBT41427 2022 家用电器质量安全 生产过程状态监测与 评价指南 — ualitsafetofhouseholdelectricala liances Guidelinesformonitorin and Q y y pp g evhttps://m.book118.com/html/2022/1102/8107100120005007.shtm
6.按摩器的检测报告入驻京东GB4806的检测项目上海安姆斯检测专业检测机构,专业提供枕芯、靠垫的质检报告,因为专业,所以值得信赖,安姆斯检测技术有限公司由德国TUV NORD 专业授权,是一家专业的检测认证第三方检测技术机构,认证服务领域涉及欧盟(20多条欧盟指令,包括CE、GS、CB、NF、OIML)、美国(FDA、DOT、UL、FCC等)、中东、澳洲、南美等全方位的产品认证和技术服https://m.bestb2b.com/business_96867373.htm
7.GB/T41427GB 4706 (所有部分) GB 4806 (所有部分) GB 4806.1-2016 GB/T 14536 (所有部分) GB/T 26572 GB/T 30976.1 购买 正式版本文件给出了家用电器生产过程中与产品质量安全相关的设计、原材料与零部件、生产、环境设施、人员等进行监测与评价的指导与建议,提出生产过程质量安全需要考虑的因素以及质量安全评价的因素、https://m.antpedia.com/standard/1545236135-1.html
8.GB/T41427—2022家用电器质量安全生产过程状态监测与评价指南GB 4706(所有部分)家用和类似用途电器的安全GB 4806(所有部分)食品安全国家标准GB 4806.1——2016食品安全国家标准食品接触材料及制品通用安全要求GB/T 14536(所有部分)家用和类似用途电自动控制器GB/T 26572电子电气产品中限用物质的限量要求GB/T 30976.1工业控制系统信息安全第1部分:评估规范3术语和定义6.2评价方法http://www.cosmeticstest.cn/rhpjczs/161204.html