Base64 编解码
中文、emoji 都不会乱码——内部按 UTF-8 处理。内容只在你的浏览器里计算。
很多在线工具用 btoa() 直接处理字符串,遇到中文就会抛错或乱码。这里先用 TextEncoder 转成 UTF-8 字节再编码,解码时反向还原。
什么时候用
- 要把一段含中文或 emoji 的文本放进只接受 ASCII 的字段(如 HTTP header、配置项)时。
- 收到一串 Base64,想知道它解码后是可读的 UTF-8 文本,还是本来就只是乱码时。
什么时候不用
- 要编码图片、PDF、压缩包等二进制文件:本工具只处理文本,二进制字节无法原样保留,请用命令行 base64 或支持文件读取的工具。
- 目的是加密或隐藏密码、token:Base64 只是编码,任何人拿到都能解码,不能当作保护措施。
编码和解码都在浏览器本地完成,输入不会上传或写入日志。限制:只处理文本,不做二进制转换;解码按 UTF-8 解释,非 UTF-8 的 Base64 会出现 �;空白会被忽略,但 Base64 字母表以外的字符会报错;输出约为 UTF-8 字节数的 4/3。
常见问题
为什么别的工具编码中文会乱码?
很多工具直接把 JavaScript 字符串交给 btoa(),而 btoa() 只接受每个字符在 0–255 范围内的二进制字符串,遇到中文会抛 InvalidCharacterError;有些绕法跳过了 UTF-8,解码端再按别的编码还原就会乱码。这里先用 TextEncoder 把文本转成 UTF-8 字节,再逐字节 btoa(),解码时用 TextDecoder 按 UTF-8 还原,所以中文和 emoji 能原样往返。
Base64 会让内容变大多少?
约 33%。Base64 把每 3 个字节编成 4 个 ASCII 字符,长度变为原来的 4/3;字节数不能被 3 整除时,末尾补 1–2 个 =。按 UTF-8 算,一个汉字 3 字节,编码后约 4 个字符;一个 emoji 通常 4 字节,编码后约 8 个字符(含填充)。
能编码图片或 PDF 文件吗?
不能。本工具只接收文本:编码时 TextEncoder 把输入当 UTF-8 文本处理,二进制文件的字节不会原样保留;解码时非 UTF-8 的字节会被替换成 �(U+FFFD),原文件就损坏了。文件转 Base64 请用系统命令(macOS/Linux 的 base64、Windows 的 certutil)或支持二进制读取的工具。