java中将base64字符串还原为原始字符需用java.util.base64解码器配合指定字符集(如utf-8)构造字符串,推荐base64.getdecoder().decode()或url安全场景用geturldecoder(),并捕获illegalargumentexception确保健壮性。

Java 中将 Base64 编码字符串还原为原始字符,核心是使用 java.util.Base64 提供的解码器,再将解码后的字节数组按指定字符集(如 UTF-8)构造为字符串。
使用 Base64.getDecoder() 解码并转为字符串
这是最常用、推荐的方式,适用于 Java 8 及以上版本:
- 调用
Base64.getDecoder().decode(String)得到原始字节数组 - 用该字节数组和明确的字符集(如
StandardCharsets.UTF_8)创建字符串 - 务必指定字符集,避免平台默认编码导致乱码
示例代码:
import java.nio.charset.StandardCharsets; import java.util.Base64; String encoded = "SGVsbG8g5L2g5aW9"; // "Hello 你好" 的 Base64(UTF-8 编码后) byte[] decodedBytes = Base64.getDecoder().decode(encoded); String original = new String(decodedBytes, StandardCharsets.UTF_8); System.out.println(original); // 输出:Hello 你好
处理 URL 安全型 Base64 字符串
如果 Base64 字符串来自 Web(如 JWT、URL 参数),可能使用了 URL 安全变体(用 - 和 _ 替代 + 和 /,且无填充或省略 =):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 应使用
Base64.getUrlDecoder()而非getDecoder() - 它自动兼容无填充格式,无需手动补等号
示例:
String urlSafeEncoded = "SGVsbG8g5L2g5aW9"; // 实际中可能是 "SGVsbG8g5L2g5aW9" 或更短形式
String original = new String(
Base64.getUrlDecoder().decode(urlSafeEncoded),
StandardCharsets.UTF_8
);
注意编码一致性与异常处理
解码失败通常因输入非法(如含非法字符、长度不对、填充错误):
- 务必捕获
IllegalArgumentException(Base64 解码失败时抛出) - 确保原始编码和解码时使用的字符集一致;例如,若原始字符串用 GBK 编码再 Base64,解码后也得用 GBK 构造字符串
- 不要依赖
new String(byte[])无参构造器——它使用系统默认编码,极不可靠
兼容 Java 7 及更早版本(不推荐,仅作了解)
若项目受限于旧 JDK,可使用 Apache Commons Codec:
- 添加依赖:
org.apache.commons:commons-codec:1.15 - 用
new String(Base64.decodeBase64(str), StandardCharsets.UTF_8)
但建议优先升级 JDK 并使用标准库,更轻量、安全、无需额外依赖。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










