计算机底层只认二进制。把「文字」变成字节序列的规则,就是字符编码。 编码不一致时,同一段字节会被解释成错误字符,即所谓乱码。
1. 字符集与编码方案
字符集定义有哪些字符及编号(如 Unicode 为大量书写系统分配码点)。 编码方案则规定这些码点如何序列化为字节(UTF-8、UTF-16 等)。
2. UTF-8 的特点
- 对 ASCII 兼容:英文字符仍占一字节,便于与旧协议共存。
- 变长编码:不同字符占 1~4 字节,英文省空间,中文等多字节。
- 互联网上极为常见:HTML 常声明
charset=utf-8。
3. 实践建议
- 源码、配置文件、数据库连接尽量统一为 UTF-8,并在文档中写明。
- 跨系统传输时关注 BOM 与「带不带签名」差异,避免隐式二次解码。
- 日志与终端编码不一致时,错误信息可能「看起来像乱码」,需分层排查。
历史编码(如部分地区曾用的双字节方案)仍可能出现在遗留数据中;迁移时应做显式转码与校验。