当前位置: 首页 > article >正文

28【UTF-8和GBK】

首先你需要阅读知道,什么是【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}


http://www.kler.cn/a/525401.html

相关文章:

  • 【C++ 真题】P1706 全排列问题
  • WSL 安装cuDNN
  • 54.数字翻译成字符串的可能性|Marscode AI刷题
  • 记录 | Docker的windows版安装
  • 基于物联网的智能环境监测系统(论文+源码)
  • Go优雅实现redis分布式锁
  • E. Binary Search
  • 是否需要显式使用 epoll_ctl ( fd , EPOLL_CTL_DEL , ... ) 来从红黑树里显式删除过期的套接字
  • python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算
  • 洛谷P3884 [JLOI2009] 二叉树问题(详解)c++
  • 登录授权流程
  • selenium自动化测试框架——面试题整理
  • 深度学习在金融风控中的应用:突破传统模型的瓶颈
  • ML基础-Jupyter notebook中的魔法命令
  • 2024 年度技术总结:从实践到成长
  • 深入剖析TCP协议:原理, 机制与应用
  • 【计算机视觉】目标跟踪应用
  • 文献分享:Informational ecosystems提供了分析数据和代码
  • RK3568中使用QT opencv(显示基础图像)
  • 预测不规则离散运动的下一个结构
  • mT5:一种大规模多语言预训练文本到文本Transformer
  • KVM/ARM——基于ARM虚拟化扩展的VMM
  • 评估训练模型所需的算力
  • 基于Cipher的Java加密工具类
  • C++11新特性之使用using(代替typedef)定义别名
  • CAPL与外部接口