首页 > 其他分享 >汉字是如何编码的

汉字是如何编码的

时间:2024-06-16 10:54:01浏览次数:16  
标签:编码 预览 区位码 GB2312 汉字 如何 ASCII

本文我们简单聊聊汉字编码方案,例如 GB2312。

GB2312 的字符集

字符编码,是对字符进行的编码,那么首先得有一个字符集,然后再去编码,就像 ASCII 码也是对 ASCII 字符集进行的编码。

那中国的字符集怎么设定呢?以 GB2312 为例,国家标准局用了分区管理的方式,将公布的 6763 个两级汉字分为 94 个区,每个区 94 位,实际上就是把汉字表示成二维数组,每个汉字在数组中的下标就是区位码(表示其属于哪个区、哪个位)。区码和位码各是两位十进制数,因此一个汉字是 4 个十进制数,例如“中”字位于第 54 区 48 位,区位码位 5448

为什么使用分区

为什么要分区来管理呢?ASCII 编码方案多简单,不好吗?目前并未搜到为何这么设计,个人认为分区是为了方便管理。中国的汉字特别多,就好比学校中,由于学生太多,因此采用了分班管理的方式,每个班再给学生编号,这样比较好管理

感兴趣的同学,可以去国家标准网上查看 GB2312 的文档,国家标准 |GB/T 2312-1980,可以在线预览文档(没找到下载按钮,无法预览)

文档在线预览地址:在线预览 |GB/T 2312-1980, 部分内容:

区位码简单说明

我们继续来讲 GB2312 的区位码设计。在 94 个区中:

  • 01 ~ 09 区:收录了除汉字外的 682 个字符
  • 10 ~ 15 区:空白区,没有使用
  • 16 ~ 55 区:收录了 3755 个一级汉字,按拼音排序
  • 56 ~ 87 区:收录了 3008 个二级汉字,按部首/笔画排序,不太常用,生僻的一些汉字。
  • 88 ~ 94 区:空白区

我们简单看看 01 ~ 09 区的字符:

图片来自非常详细的字符编码讲解,ASCII、GB2312、GBK、Unicode、UTF-8 等知识点都有_哔哩哔哩

第 16 ~ 55 区的截图如下。前面我们说过 “中”字位于第 54 区 48 位,区位码位 5448。读者也可以去看 在线预览 |GB/T 2312-1980 第 22 页:

56 ~ 87 区的部分截图如下:

GB2312 如何存储

我们之前只讲了区位码,但没有规定怎么在计算机里存储。我们以侃字为例,侃的区位码是 5709,我们将区和位分开,并转为 16 进制。57 对应 0x39, 09 对应的还是 0x09。然后将区码和位码分别加上 A0,得到 0xD9 和 0xA9,然后合并,就是 0xD90xA9:

为什么要加 A0:为了兼容 ASCII。GB2312 是双字节编码,为了与 ASCII 码区分开,字节的第 8 位必须是 1,所以至少要从 0x80(128, 1000 0000) 开始,但是根据上面的规定,0x80 - 0x9f 要留给控制块,所以只能从 0xA0 开始。那为什么 GB2312 编码不是从 0xA0 开始,而是 0xA1 开始呢? 因为 0xA0 正好是图形块的空格,所以就从 0xA1 编码,这就是 0xA0 的由来。

综上,一个汉字要占两个字节,两个字节均大于 127。

实践:查看汉字的 GB2312 码

如果你用过 Python,可以用以下代码打印出侃的 GB2312 码

print('侃'.encode('gb2312')) # 结果为'\xd9\xa9'

读者也可以新建一个 txt 文件,然后通过 IDE 或者编辑器的十六进制的方式查看文件,以 Sublime 为例:

这里不展开,有兴趣的读者请自行上网搜索。

如果你在 Linux 下,可以使用 hexdump 命令:

$hexdump  侃.txt
0000000 a9d9   

GBK

因此,在 1995 年,中国发布了 GBK 编码,其包含了 GB2312 的所有内容,同时新增了近 20000 个新的汉字(繁体字)和符号

GBK 编码不再要求低字节要大于 127,只要第一个字节大于 127 就表示是一个汉字的开始。

标签:编码,预览,区位码,GB2312,汉字,如何,ASCII
From: https://www.cnblogs.com/PeterJXL/p/18250286

相关文章

  • 如何从vcf文件中快速提取基因型GT?
    如题,如何从vcf文件中快速提取基因型Genotype,得到基因型表格文件?vcf作为标准的存储变异的文件格式。虽是标准格式,但可扩展性极强,变异属性可随意添加,真是很妙的设计!其实vcf格式和vcftools软件文章发表也不过13年而已。基因型矩阵,类似于HapMap格式,市场上大多数芯片也是这种。比如,......
  • 【Kafka专栏 05】一条消息的完整生命周期:Kafka如何保证消息的顺序消费
    作者名称:夏之以寒作者简介:专注于Java和大数据领域,致力于探索技术的边界,分享前沿的实践和洞见文章专栏:夏之以寒-kafka专栏专栏介绍:本专栏旨在以浅显易懂的方式介绍Kafka的基本概念、核心组件和使用场景,一步步构建起消息队列和流处理的知识体系,无论是对分布式系统感兴趣,还......
  • Java学习 - MySQL数据库中提到的 视图 是什么? 如何使用?
    视图是什么视图是一张虚拟的表,视图本质上保存的是SQL语句,而不是实际的数据当使用视图时,视图会根据保存的SQL语句动态生成虚拟的数据表视图的优点保密性好简化操作修改限制视图的语法创建视图CREATEVIEWIFNOTEXISTS视图名AS查询语句CREATEVIEWmyviewASSE......
  • 【最新】抖音账号永久封号后如何强制注销抖音账号并释放实名信息的方法。
    抖音账号永久封号对于用户来说无疑是一个噩耗,但在某些特殊情况下,我们可能需要强制注销抖音账号。本文将为您介绍如何在永久封号后强制注销抖音账号并释放实名信息,让您重新拥有一个全新的抖音账号。一、永久封号后的影响无法登录:永久封号后,您将无法再使用该抖音账号登录,也......
  • linux下C语言如何操作文件(二)
    上篇文章中,我们简单介绍了file_util.h中定义的各函数,今天我们来讲解如何实现头文件中定义的各函数。首先,在file_util.c中,我们需要引入相应的头文件:#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<unistd.h>#include<sys/stat.h>#include<sys/typ......
  • 如何做高效的应急响应?
    前言本文只做分享,技术交流由于攻击面广、攻击路径不定;怎样快速定位、快速分析安全入侵、攻击事件,快速取证并及时上报就显得尤为重要。目录前言常见的安全事件有哪些?入侵事件信息泄露事件Web应用安全事件怎么去找这些造成安全事件的因素呢?日志分析恶意文件监控安......
  • 快团团大团长如何手动发放帮卖团长的佣金?
    一、功能说明若团长在设置帮卖时,设定帮卖团长的佣金结算方式为“手动结算”时,当帮卖团长成功帮卖后,团长需要手动发放帮卖佣金。二、具体设置方法1、如何设置手动发放帮卖佣金?在开团时选择“复制我的团进行帮卖”,进入复制帮卖设置后,将佣金的发放方式选择为“手动发放”2......
  • 如何在网络上找到适合的外链平台
    在当前日益竞争激烈的网络环境中,想要提升网站的曝光度和排名是每个网站主人和网络营销人员的共同目标。而外链作为一种有效的网站优化手段,被广泛应用于各种网络推广活动中。本文将向您介绍如何寻找适合的外链平台,以帮助您达到更好的网络营销效果。首先,寻找适合的外链平台需要了解......
  • 代理IP纯净度如何测试?
    在网络应用和数据采集等领域,代理IP被广泛使用,而代理IP的纯净度则直接影响其性能和可用性。代理IP的纯净度主要涉及到代理IP在网络传输过程中的稳定性、匿名性和安全性。今天就带大家一起了解代理IP纯净度对用户的重要性。第一,保护用户的隐私在网络世界中,用户的真实身份和位置......
  • 代理IP纯净度如何测试?
    在网络应用和数据采集等领域,代理IP被广泛使用,而代理IP的纯净度则直接影响其性能和可用性。代理IP的纯净度主要涉及到代理IP在网络传输过程中的稳定性、匿名性和安全性。今天就带大家一起了解代理IP纯净度对用户的重要性。第一,保护用户的隐私在网络世界中,用户的真实身份和位置......