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

Android中encodeURIComponent(window.btoa(JSON.stringify(data)))等价实现

Android 等价实现方案

没问题,我来帮你搞定Android上的对应实现!先拆解下你那段JavaScript代码的执行逻辑:

  1. 把数据对象序列化为JSON字符串(对应JSON.stringify(data))
  2. 对JSON字符串做Base64编码(对应window.btoa())
  3. 最后对Base64结果做URL编码(对应encodeURIComponent())

下面分别给出Kotlin和Java版本的实现,都是Android平台原生/常用的API:

Kotlin 实现

import android.util.Base64
import java.net.URLEncoder
import com.google.gson.Gson

// 先定义对应的数据类
data class UserData(
    val email: String,
    val password: String,
    val mobile: String
)

fun generateEncodedData() {
    // 1. 创建数据对象
    val data = UserData("abc@gmail.com", "123abc", "1234567890")
    
    // 2. 序列化为JSON字符串(用Gson更便捷,也可以用Android自带的JSONObject)
    val jsonString = Gson().toJson(data)
    
    // 3. Base64编码:NO_WRAP确保和window.btoa输出一致,不会加换行符
    val base64Result = Base64.encodeToString(jsonString.toByteArray(), Base64.NO_WRAP)
    
    // 4. URL编码,指定UTF-8避免乱码
    val finalResult = URLEncoder.encode(base64Result, "UTF-8")
    
    // 打印结果,和你提供的JS输出逻辑一致
    println(finalResult)
}

Java 实现

import android.util.Base64;
import com.google.gson.Gson;
import java.net.URLEncoder;
import java.io.UnsupportedEncodingException;

// 定义数据实体类
class UserData {
    public String email;
    public String password;
    public String mobile;

    public UserData(String email, String password, String mobile) {
        this.email = email;
        this.password = password;
        this.mobile = mobile;
    }
}

public class EncodingUtil {
    public static String getEncodedData() throws UnsupportedEncodingException {
        // 1. 初始化数据
        UserData data = new UserData("abc@gmail.com", "123abc", "1234567890");
        
        // 2. 转JSON字符串
        String jsonString = new Gson().toJson(data);
        
        // 3. Base64编码
        String base64Result = Base64.encodeToString(jsonString.getBytes(), Base64.NO_WRAP);
        
        // 4. URL编码
        return URLEncoder.encode(base64Result, "UTF-8");
    }
}

额外说明

  • 如果不想引入Gson依赖,也可以用Android自带的JSONObject手动构建JSON:
    val jsonObject = JSONObject().apply {
        put("email", "abc@gmail.com")
        put("password", "123abc")
        put("mobile", "1234567890")
    }
    val jsonString = jsonObject.toString()
    
  • Base64.NO_WRAP一定要加,因为window.btoa()不会输出换行符,而Android默认的Base64.DEFAULT会自动加换行,导致结果不一致。
  • URL编码必须指定UTF-8编码,否则可能出现字符乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:10:52