吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 979|回复: 1

[知识手册] 【UTF-8和GBK】

[复制链接]
书香 发表于 2023-5-18 20:32 | 显示全部楼层 |阅读模式

本帖最后由 书香 于 2024-3-6 05:11 编辑

首先你需要阅读知道,什么是【ASCALL编码】



对于ascall码一共是256个,远远无法表示出全球的字符,对于汉字而言也无法表达,那么就使用2个ascall码表示一个汉字,那么256*256=65532,也就是说2个ascall码可以表示65532个字符,那么在此基础上发展出了gbk编码


但是这样会存在一个问题,比如a的ascall码是97,那{97,97}是表示aa还是表示一个汉字?


所以汉字使用了一个拓展码(129-255)+1个全码(0-255)来表示,这个设计很巧妙,只要出现一个拓展码,就要将这个拓展码及其后面的哪个ascall码看成一个整体


理论最多可表达汉字:
128*256=32768个



这就是我在ascall编码文章中说过的后面的128个不单独表示某个符号,而是为了防止出错,起到配合作用



重点:GBK和GB2312这是我们很长用到的2种编码,其中GB2312发布的时间早(1980年),GB2312 包含 6763 个汉字; GBK 包含 21886 个汉字和图形符号;GBK兼容GB2312,对于一般开发来说,GB2312完全足够了,GBK主要包括了很多生僻字
拓展:GBK第一个字节ascall码129-254(127个),第二个字节的范围是64-254(192个)
127*192=24384
很多人可能会问,不是21886吗?不一定全编码了,而且有几个ascall码没采用,这里我们就不探讨了,大概知道原理就好
重点:这里要说明的是gbk编码是由2个ascall码为一组构成的基本单元,比如“你”的gbk编码是{196,227},但是{196,227}只是在gbk编码中表示“你”,在其他双字节编码中可能表示“我”,这个没有什么技巧,就是一一对应的关系,编码设计者规定的

utf-8编码使用3个ascall编码来表达一个字符,所以是128(拓展码)*256(全码)*256(全码)= 8388608(理论值),显然可以满足几乎全球所有的字符,也就是说全球几乎任意一个字符都有唯一的一个utf-8编码去对应,所以utf-8编码也称为全球通用编码,现在大多数网站都是采用utf-8编码的

难点1:如果一个网站采用的是gbk编码,会如何
首先,在中国是可以正常阅读的,但是在外国可能会乱码,因为外国的设备上采用的不一定是gbk编码,比如{196,227}对应的是“你”,但是在外国的设备上对应的可能是其他字符,那么看上去就如同乱码一样

提示:utf-8中中文“你”对应的是编码是:{228,189,160}


(点击返回课程目录https://www.52hb.com/thread-58658-1-1.html

评分

参与人数 5HB +3 THX +3 收起 理由
小才不才 + 1
学编程的闹钟 + 1
猫吃 + 1 这篇扫盲了算是
消逝的过去 + 1
sjtkxy + 1 + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
sjtkxy 发表于 2023-6-8 05:16 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表