汉字编码之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~21003是是是GB2312 扩展GB18030> 70,000是是是国家标准,兼容 GBKUnicode (UTF-8/UCS-2)> 100,000是是是(UTF-8)国际通用编码
五、GBK 编码的应用现状
虽然目前 UTF-8 已成为互联网主流编码格式,但 GBK 在以下场景仍有广泛应用:
Windows 简体中文系统:默认编码是 GBK。旧系统的数据迁移:许多遗留系统仍使用 GBK 编码保存历史数据。网页开发中的传统网站:一些老网站仍然使用 GBK 编码。数据库导出文件:如 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.phphttps://tool.oschina.net/encode
八、总结
项目内容名称GBK(国标扩展)类型双字节编码支持字符约 21003 个向后兼容GB2312、ASCII替代方案GB18030、UTF-8主要用途Windows 简体中文、旧系统数据、网页等