编码就是把字符(文字、符号)转换成计算机能存的二进制字节,不同编码对字符的字节长度、支持字符集不一样。
1. ASCII
字节:1 字节,只能表示 0‑127
包含:英文字母大小写、数字、半角符号、控制字符(换行、回车)
用途:最早基础编码,英文、程序源码、简单配置文件;不支持中文。
缺点:没有汉字,国内直接用会乱码。
2. GB2312
字节:英文 1 字节,汉字 2 字节
包含:简体中文、少量符号
用途:国内早期简体中文文档、老系统。
局限:没有繁体、日文、生僻字。

3. GBK(最常用老中文编码)
字节:英文 1 字节,汉字 2 字节
兼容:向下兼容 GB2312,增加繁体中文、部分日韩字符、生僻字
用途:Windows 中文系统默认旧编码;老 txt、exe、bat、国内老数据库、网页老页面。
Windows 记事本另存为里的「ANSI」在中文系统实际就是 GBK。
4. GB18030
字节:1/2/4 字节可变;完全兼容 GBK
包含:全部中日韩汉字、极多生僻字,国家强制标准
用途:政务系统、国产软件、数据库,推荐国内新系统优先 GB18030 替代 GBK。
5. UTF‑8(互联网主流)
可变长:ASCII 字符 1 字节,中文 3 字节,生僻字 4 字节
完全兼容 ASCII,全球所有语言字符
用途:网页、JSON、接口、源代码、Linux/macOS、日志、数据库、绝大多数现代项目。
互联网事实标准,跨平台几乎不会乱码。
6. UTF‑16
UTF‑16LE / UTF‑16BE
大部分字符 2 字节,部分生僻字 4 字节;LE 小端、BE 大端代表字节存储顺序
用途:Windows 内核、Java 内部字符串、.NET、部分 Windows 文档;不适合网络传输,体积大。
Windows 记事本 “Unicode” 就是 UTF‑16‑LE。
7. UTF‑32
固定 4 字节存每个字符
用途:底层文本处理、极少用于存储传输,占用空间巨大。

关键对比 & 场景选型
容易踩坑的乱码场景
Windows 保存 GBK 的 txt 丢到 Linux 打开 → 乱码;解决:保存为 UTF‑8
接口返回 GBK,程序按 UTF‑8 解析 → 乱码;需要指定正确编码解码
UTF‑8 with BOM:文件头部多 3 个字节标记,Windows 记事本保存 UTF‑8 会带 BOM;shell 脚本、Python 源码不要 BOM,会报错。
简单选型建议
对外接口、Web、前后端、日志、Linux 环境:一律 UTF‑8(无 BOM)
国内政务、老 Windows 存量系统:优先 GB18030,尽量不用 GBK
不要用 UTF‑16 做文件存储和网络传输。
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢