Android中encodeURIComponent(window.btoa(JSON.stringify(data)))等价实现
Android 等价实现方案
没问题,我来帮你搞定Android上的对应实现!先拆解下你那段JavaScript代码的执行逻辑:
- 把数据对象序列化为JSON字符串(对应
JSON.stringify(data)) - 对JSON字符串做Base64编码(对应
window.btoa()) - 最后对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
相关产品推荐
相关产品推荐

