汉字编码之GBK编码详解

该文章已生成可运行项目,

汉字编码之GBK编码详解

GBK(Guo Biao Kuozhan,国家标准扩展)是一种中文字符编码标准,主要用于简体中文的字符表示。它是对GB2312-80标准的扩展,包含了更多的汉字和符号,广泛应用于Windows系统、网页、数据库等中文信息处理环境中。


一、GBK 编码的基本背景

1. GB2312 简介

  • GB2312 是中国大陆于1980年发布的第一个汉字编码标准。
  • 包含 6763 个常用汉字(一级 3755 个,二级 3008 个),以及 682 个标点符号、数字、拉丁字母等。
  • 使用双字节编码方式,每个汉字用两个字节表示。
  • 字节范围:首字节 0xB0-0xF7,尾字节 0xA1-0xFE

2. GBK 的提出

  • 随着使用需求的增加,GB2312 中的汉字数量不足以满足实际应用。
  • 于是微软在 Windows 系统中推出 GBK 编码,作为对 GB2312 的兼容性扩展。
  • GBK 并非正式国家标准,但后来被收录进 GB/T 13000.1-1993(即 Unicode 的中国对应标准)中,并最终被 GB18030 所取代。

二、GBK 编码的特点

特性描述
编码类型双字节编码(部分单字节 ASCII 兼容)
支持字符数约 21003 个汉字(包括繁体字、少数民族文字等)
向后兼容完全兼容 GB2312 和 ASCII
应用环境Windows 简体中文系统、早期网页、数据库、邮件等

三、GBK 编码结构

GBK 编码空间为:

  • 首字节范围0x81-0xFE
  • 尾字节范围
    • 0x40-0x7E(共 63 个)
    • 0x80-0xFE(共 127 个)

总共可以表示 (0xFE - 0x81 + 1) * (63 + 127) = 大约 21000+ 个字符。

GBK 编码分为多个区段(Zone),如下所示:

区号范围(首字节, 尾字节)内容说明
18140-FEFEGB2312 原有字符(向后兼容)
2A1A1-A9FE符号、部首、特殊字符
3B0A1-F7FEGB2312 区段,包含常用汉字
47440-7D7E增补汉字(如“镕”、“堃”)
5A6A1-A6FE希腊字母、俄语字母等
6AD00-AD7E日文平假名
7FA40-FEFE扩展汉字(包括生僻字、少数民族文字等)

四、GBK 与常见编码的比较

编码格式支持字符数是否支持繁体是否支持生僻字是否兼容 ASCII备注
ASCII128英文字符集
GB2312~6763简体中文基础
GBK~21003GB2312 扩展
GB18030> 70,000国家标准,兼容 GBK
Unicode (UTF-8/UCS-2)> 100,000是(UTF-8)国际通用编码

五、GBK 编码的应用现状

虽然目前 UTF-8 已成为互联网主流编码格式,但 GBK 在以下场景仍有广泛应用:

  1. Windows 简体中文系统:默认编码是 GBK。
  2. 旧系统的数据迁移:许多遗留系统仍使用 GBK 编码保存历史数据。
  3. 网页开发中的传统网站:一些老网站仍然使用 GBK 编码。
  4. 数据库导出文件:如 MySQL 导出时设置为 GBK 编码。

六、GBK 编码示例

汉字GBK 编码(十六进制)十进制表示
CED20xCED2
CAC70xCAC7
D1A70xD1A7
C9FA0xC9FA

例如,“我是学生”的 GBK 编码为:

CED2 CAC7 D1A7 C9FA

七、如何识别或转换 GBK 编码?

1. 使用 Python 进行编码转换

# 读取 GBK 编码文件
with open('file.txt', 'r', encoding='gbk') as f:
    content = f.read()
    print(content)

# 字符串转 GBK 编码
s = "你好"
print(s.encode('gbk'))  # b'\xc4\xe3\xba\xc3'

# GBK 编码转字符串
b = b'\xc4\xe3\xba\xc3'
print(b.decode('gbk'))  # 输出:你好

2. 使用在线工具

  • https://www.qqxiuzi.cn/zh/hanzi-gbk.php
  • https://tool.oschina.net/encode

八、总结

项目内容
名称GBK(国标扩展)
类型双字节编码
支持字符约 21003 个
向后兼容GB2312、ASCII
替代方案GB18030、UTF-8
主要用途Windows 简体中文、旧系统数据、网页等

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涔溪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值