UTF-8 是 Unicode 最常用的存储编码,用 1–4 个字节表示一个字符:ASCII 字符 1 字节,拉丁字母扩展 2 字节,常用汉字 3 字节,emoji 等 4 字节。下面重点说明工具、命令行与代码三种方式。
UTF-8使用方法
- 用本站字符编码检测工具粘贴文本或上传文件,查看识别出的编码
- 乱码时对比 UTF-8 与 GBK 两种解读结果
- 确认后在编辑器中以 UTF-8(无 BOM)重新保存
# 查看文件编码
file -i notes.txt
# GBK 转 UTF-8
iconv -f GBK -t UTF-8 in.txt > out.txt
# 查看字节
echo -n "中" | xxd # e4b8 ad"中".encode("utf-8") # b'\xe4\xb8\xad'
b"\xe4\xb8\xad".decode("utf-8") # '中'
len("123问".encode("utf-8")) # 6
open("a.txt", encoding="utf-8")
示例
输入:https://www.123wen.cn/?q=测试
编码结果:
68 74 74 70 73 3A 2F 2F 77 77 77 2E 31 32 33 77 65 6E 2E 63 6E 2F 3F 71 3D E6 B5 8B E8 AF 95
说明:按 UTF-8 共 31 字节。
规则说明
- 首字节前导 1 的个数表示总字节数,后续字节都以 10 开头
- 同一个码点只能用最短形式编码(过长编码是非法的)
- U+D800–U+DFFF 代理项码点不能出现在 UTF-8 中
- BOM 不是必需的,Linux 和网页通常不加
JavaScript 示例
下面是 JavaScript 中处理UTF-8的常用写法:
new TextEncoder().encode("中"); // Uint8Array [228, 184, 173]
new TextDecoder("utf-8").decode(bytes);
// Node.js
Buffer.byteLength("123问", "utf8"); // 6运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
本站的字符编码检测工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【UTF-8 和 utf8mb4 有什么区别?】utf8mb4 是 MySQL 中真正完整的 UTF-8;MySQL 的 utf8 最多 3 字节,不能存 emoji。
【什么是 BOM?】文件开头的 EF BB BF 三个字节,用来标记 UTF-8。网页和脚本文件建议不加。
【“䏿–‡”是什么乱码?】UTF-8 编码的“中文”被按 Latin-1/Windows-1252 解读的结果。
文中示例可以在本站对应工具中验证;处理密码、证件号等敏感数据时,请注意保护隐私。
标签: 文本处理