项目背景
在实际软件开发过程中,字符编码问题几乎是所有 C/C++ 程序员绕不开的难题。
尤其在以下场景中,编码问题尤为突出:
- Linux / Windows 跨平台开发
- 网络通信(HTTP、Socket)
- 旧系统(GBK)与新系统(UTF-8)交互
- 数据库读写
- 日志系统、配置文件解析
在中文环境下,最常见的两种编码就是:
- UTF-8:国际通用 Unicode 编码,Linux / 网络默认
- GBK:Windows 中文系统历史主流编码
如果处理不当,就会出现:
- 中文乱码
- 字符长度计算错误
- 字符串截断
- 程序逻辑异常
因此,掌握 UTF-8 与 GBK 的相互转换,是 C++ 工程实践中的一项必备技能。
本项目目标是使用 C++ 实现一个完整、稳定、可复用的 UTF-8 ⇄ GBK 编码转换工具。
功能需求
- 支持 UTF-8 → GBK 转换
- 支持 GBK → UTF-8 转换
- 能正确处理中文字符
- 能处理任意长度字符串
技术要求
- 基于 Linux / Unix 环境
- 使用系统提供的 iconv 编码转换库
- 封装为独立函数,便于复用
- 错误处理清晰
- 代码教学友好、注释详细
设计要求
- 使用 C++ 封装 C 接口
- 所有代码集中在一个代码块
- 用注释模拟多文件结构
- 不依赖第三方库(iconv 属于系统库)
相关技术
常见字符编码概念
ASCII
- 1 字节
- 仅支持英文字符
GBK
- 兼容 ASCII
- 中文通常占 2 字节
- Windows 中文环境常见
UTF-8
- Unicode 编码的一种实现方式
- 可变长度编码:
- 英文:1 字节
- 中文:3 字节
- Linux / 网络协议默认编码
为什么需要编码转换
举例:
- Windows 程序(GBK)写文件
- Linux 程序(UTF-8)读取文件
如果不做转换,中文必然乱码。
iconv 编码转换库
iconv 是什么?
- Linux 系统提供的字符编码转换库
- 支持几乎所有主流编码
- 基于字节流转换
核心 API
iconv_t iconv_open(const * to, * from);
;
;

