推荐使用java.util.Base64(JDK 8+内置),编码需显式指定UTF-8字符集调用encodeToString,解码需用相同字符集构造字符串;URL场景用getUrlEncoder/Decoder;常见错误包括未指定字符集、解码后未按UTF-8转字符串、混淆编码器类型。

Java 中字符串转 Base64 编码和解码,推荐使用 java.util.Base64(JDK 8+ 内置),它线程安全、无需额外依赖、用法简洁。
字符串转 Base64 编码(编码)
先将字符串按指定字符集(如 UTF-8)转为字节数组,再用 Base64 编码器编码为字符串:
- 务必显式指定字符集,避免平台默认编码不一致导致乱码
- 使用
Base64.getEncoder().encodeToString(byte[])
String original = "Hello 世界"; String encoded = Base64.getEncoder().encodeToString(original.getBytes(StandardCharsets.UTF_8)); // 结果类似:SGVsbG8g5L2g5aW9
Base64 字符串还原为原始字符串(解码)
先用 Base64 解码器将 Base64 字符串转回字节数组,再按相同字符集构造字符串:
- 解码时若输入非法(如长度不对、含非法字符),会抛
IllegalArgumentException - 必须与编码时使用相同的字符集(如 UTF-8),否则中文会乱码
String decoded = new String(Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8); // 结果:Hello 世界
注意 URL 安全 Base64(可选场景)
如果 Base64 字符串要用于 URL 或文件名,普通 Base64 中的 + 和 / 会被转义或出错。此时改用:
立即学习“Java免费学习笔记(深入)”;
-
Base64.getUrlEncoder()编码(输出只含字母、数字、-、_) -
Base64.getUrlDecoder()解码(兼容标准和 URL 安全格式)
String urlSafeEncoded = Base64.getUrlEncoder().encodeToString("user@domain.com".getBytes(UTF_8));
// 输出:dXNlckBkb21haW4uY29t
常见错误提醒
以下操作容易出问题,需特别注意:
- 忘记指定字符集(如直接用
str.getBytes()),在 Windows 和 Linux 上可能分别用 GBK/UTF-8,导致解码失败 - 把 Base64 解码结果误当字符串直接打印(未用
new String(..., UTF_8)),看到的是乱码字节序列 - 混淆
getEncoder()和getMimeEncoder()(后者带换行,不适合一般存储)


















