从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • RSS
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 📖 读书

    • 读书工具
    • 读书笔记
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 计算机简史

  • 数字电路

  • 计算机组成原理

    • 计算机组成原理(北大-陆俊林)

    • 字符编码入门

      • 简单聊聊计算机之中的时间
      • 简单聊聊字符编码
      • ASCII 字符表和说明
      • ASCII 的 SOH 的用处
      • 回车和换行
      • 汉字是怎么编码的
        • GB2312 的字符集
        • 为什么使用分区
        • 区位码简单说明
        • GB2312 如何存储
        • 实践:查看汉字的 GB2312 码
        • GBK
      • 简单聊聊 Unicode
      • 手持两把锟斤拷,口中疾呼烫烫烫
      • 数据库与编码
      • 编程语言与字符编码
      • URL 编码
      • Base64 编码
      • 字符编码小结
      • 一些有趣的代码注释
  • 操作系统

  • Linux

  • 计算机网络

  • 数据库

  • 编程工具

  • 装机

  • 计算机基础
  • 计算机组成原理
  • 字符编码入门
2022-12-20
目录

汉字是怎么编码的

# 16.汉字是怎么编码的

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

‍

# GB2312 的字符集

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

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

# 为什么使用分区

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

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

​​ ‍

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

​​ ‍

# 区位码简单说明

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

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

​​

图片来自非常详细的字符编码讲解,ASCII、GB2312、GBK、Unicode、UTF-8 等知识点都有_哔哩哔哩 (opens new window) ‍ 第 16 ~ 55 区的截图如下。前面我们说过 “中”字位于第 54 区 48 位,区位码位 5448。读者也可以去看 在线预览 |GB/T 2312-1980 (opens new window) 第 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'
1

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

​​

这里不展开,有兴趣的读者请自行上网搜索。 ‍ 如果你在 Linux 下,可以使用 hexdump 命令:

$hexdump  侃.txt
0000000 a9d9   
1
2

​​ ‍

# GBK

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

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

上次更新: 2025/5/9 14:55:39
回车和换行
简单聊聊 Unicode

← 回车和换行 简单聊聊 Unicode→

最近更新
01
吐槽一下《僵尸校园》
05-15
02
2025 年 4 月记
04-30
03
山西大同 “订婚强奸案” 将会给整个社会带来的影响有多严重? - 知乎 转载
04-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式