You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java/Kotlin Base64解码器解码JavaScript btoa()编码的字符串

问题原因

  • 核心错误点1:java.util.Base64.getDecoder().decode() 方法返回值为byte[]字节数组类型,直接调用toString()得到的是字节数组对象的内存地址标识,而非解码后的文本内容。
  • 匹配问题2:JavaScript的btoa()函数编码时默认按ISO-8859-1(Latin-1) 字符集将字符串转为字节流再做Base64转换,Java端解码时需要用相同字符集将字节数组转回字符串,否则会出现乱码。

正确实现方案

Java完全可以完成该解码操作,参考以下代码:

JDK8及以上通用写法

import java.util.Base64;
import java.nio.charset.StandardCharsets;

public class Base64Test {
    public static void main(String[] args) {
        String encodedStr = "S0VEQUkgUlVOQ0lUIFZSSU5FIEVOVEVSUFJJU0UgLSBLRyBTSU1QQU5HIDQgU09PSw";
        // 解码得到字节数组
        byte[] decodedBytes = Base64.getDecoder().decode(encodedStr);
        // 按ISO-8859-1字符集转成字符串
        String result = new String(decodedBytes, StandardCharsets.ISO_8859_1);
        // 输出结果为:KEDAI RUNCIT VRINE ENTERPRISE - KG SIMPANG 4 SOOK
        System.out.println(result);
    }
}

Android环境兼容写法

Android低版本不支持java.util.Base64,推荐用系统内置的Base64工具:

import android.util.Base64;
import java.nio.charset.StandardCharsets;

// 业务代码中调用
String encodedStr = "S0VEQUkgUlVOQ0lUIFZSSU5FIEVOVEVSUFJJU0UgLSBLRyBTSU1QQU5HIDQgU09PSw";
byte[] decodedBytes = Base64.decode(encodedStr, Base64.DEFAULT);
String result = new String(decodedBytes, StandardCharsets.ISO_8859_1);

补充说明:如果后续需要处理含中文等非Latin-1字符的场景,JS端编码前需要先做UTF-8转义处理(btoa(unescape(encodeURIComponent(原始字符串)))),对应的Java端解码后改用StandardCharsets.UTF_8转字符串即可正常识别。

内容的提问来源于stack exchange,提问作者azraf mys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:00:02