编码转换工具
文本与 Base64、HEX 十六进制、二进制的双向转换,统一按 UTF-8 字节处理,中文不会乱码。HEX 支持空格分隔与 0x 前缀,二进制按 8 位一组解析。解码失败会给出明确提示,全部在浏览器本地完成。
Base64、HEX 与二进制是同一段字节的三种写法:Base64 用 64 个可打印字符表示任意字节,常用于只允许文本的场合(邮件正文、URL 参数、配置文件)携带二进制;HEX 每字节两位十六进制,便于肉眼比对;二进制按 8 位一组,适合观察比特位。
需要强调两点:Base64 不是加密 —— 它没有密钥,拿到字符串即可还原,只能用于编码传输,不能用来保护敏感数据;中文乱码则多是因为先按 GBK 编码再 Base64,解码时却按 UTF-8 还原,全过程统一 UTF-8 就不会出现。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 选择方向:把文本编码成 Base64 / HEX / 二进制,或把编码结果解码回文本。
- 粘贴内容后点转换;HEX 支持空格分隔与 0x 前缀,二进制按 8 位一组解析。
- 解码失败会给出明确提示(例如字节序列不是合法 UTF-8),不会输出乱码。
- 结果要放进 URL 时,Base64 里的加号、斜杠、等号建议再做一次 URL 编码。
计算原理与示例
编码过程
编码过程:先把文本按 UTF-8 转成字节序列,再把字节转成目标格式。所以「Hello, 世界」的 Base64 是 SGVsbG8sIOS4lueVjA==,其中 世=E4 B8 96、界=E7 95 8C。
Base64、HEX、二进制的关系
Base64 用 64 个可打印字符表示任意字节,3 字节编成 4 字符,末尾用 = 填充;HEX 每字节写成 2 位十六进制(Hi → 48 69);二进制每字节 8 位(Hi → 01001000 01101001)。
解码与报错处理
解码时按同样规则还原字节再按 UTF-8 解出文本。若字节序列不是合法 UTF-8(比如截断了多字节字符),会明确报错而不是输出乱码。
代码示例
JavaScript 浏览器里编码(中文要注意)
// 正确做法:先按 UTF-8 转字节,再转 Base64
const text2b64 = (s) => btoa(String.fromCharCode(...new TextEncoder().encode(s)));
const b64ToText = (b) => new TextDecoder().decode(Uint8Array.from(atob(b), (c) => c.charCodeAt(0)));
text2b64("Hello, 世界"); // "SGVsbG8sIOS4lueVjA=="
b64ToText("SGVsbG8sIOS4lueVjA=="); // "Hello, 世界"
Shell 命令行与十六进制
# 文本 → Base64
echo -n "Hello" | base64 # SGVsbG8=
# Base64 → 文本
echo "SGVsbG8=" | base64 -d
# 查看字节的十六进制(macOS 亦可用 xxd)
echo -n "Hello" | xxd -p | cut -c1-10 # 48656c6c6f
常见问题
Base64 是加密吗?
不是。Base64 只是编码,任何人都能无密钥解码,绝不能用来保护密码或敏感数据。它的作用是把任意字节变成纯文本安全的形态,常用于邮件附件、Data URL、HTTP Basic 认证传输格式等场景。
为什么别人的 Base64 工具解中文会乱码?
很多工具按「每字符取低字节」处理,只对 ASCII 正确。中文在 UTF-8 下每字占 3 字节,必须整体按 UTF-8 编解码。本工具统一使用 UTF-8,与浏览器 btoa(unescape(encodeURIComponent(s))) 的结果一致。
HEX 输入支持哪些格式?
支持空格分隔(48 69)、连续书写(4869)、0x 前缀(0x4869)与逗号分隔,大小写均可。奇数位或出现非十六进制字符会报错。
UTF-8 和 GBK 有什么区别?
UTF-8 是国际通用编码,一个汉字通常占 3 字节,兼容所有语言;GBK 是中文专用编码,一个汉字占 2 字节。本工具统一按 UTF-8 处理,因此拿它去解按 GBK 编码的数据时会显示乱码,需要先在源端转码。
Base64 编码后长度会增加多少?
大约增加 33%。Base64 把每 3 字节的二进制数据编码成 4 个可打印字符,不足时用等号补齐,所以结果长度约为原数据的 4/3。它常用来把二进制内容安全地嵌入 JSON、URL 或邮件等文本协议。
URL 里的中文为什么要编码?
因为 URL 只允许 ASCII 字符,中文和特殊符号必须转成 %XX 的百分号编码(如「中」→ %E4%B8%AD)。空格在路径中常用 %20,在查询串中常用加号,服务端两种写法都应能正确解析。
转换结果可以还原成原文吗?
可以。Base64、HEX、二进制都是可逆编码,把输出重新粘贴回去并选择反向转换即可还原,前提是使用同一字符集(本工具为 UTF-8)。编码只改变表示形式,不改变内容本身。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。