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

在Android(NativeScript)中实现Base64编码的正确方法咨询

正确的Base64实现方案

针对你遇到的三种编码方式都失效的情况,分两种场景给出解决办法:

场景1:可调用Android原生API(如WebView JS桥接、Rhino引擎环境)

你之前的代码问题在于:password是JS原生字符串,而getBytes()是Java String类的方法,两者不能直接混用。需要先将JS字符串转为Java String对象,再执行编码:

// 把JS字符串转为Java String实例
const javaPassword = new java.lang.String(password);
// 获取UTF-8编码的字节数组
const bytes = javaPassword.getBytes("UTF-8");
// 调用Android原生Base64编码,NO_WRAP表示不添加换行符
const base64Str = android.util.Base64.encodeToString(bytes, android.util.Base64.NO_WRAP);

场景2:无法调用Android原生API(纯JS环境)

如果环境限制不能使用原生API,直接用纯JS实现UTF-8兼容的Base64编码:

function base64Encode(str) {
  const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
  let result = '';
  const utf8Bytes = new TextEncoder().encode(str);
  let index = 0;

  while (index < utf8Bytes.length) {
    const byte1 = utf8Bytes[index++] || 0;
    const byte2 = utf8Bytes[index++] || 0;
    const byte3 = utf8Bytes[index++] || 0;

    const enc1 = byte1 >> 2;
    const enc2 = ((byte1 & 3) << 4) | (byte2 >> 4);
    let enc3 = ((byte2 & 15) << 2) | (byte3 >> 6);
    let enc4 = byte3 & 63;

    // 处理不足3字节的情况
    if (index - 2 === utf8Bytes.length) enc4 = 64;
    if (index - 1 === utf8Bytes.length) enc3 = 64;

    result += base64Chars.charAt(enc1) + base64Chars.charAt(enc2) + base64Chars.charAt(enc3) + base64Chars.charAt(enc4);
  }
  return result;
}

// 使用示例
const x = base64Encode(password);

内容的提问来源于stack exchange,提问作者Alex-1999

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:09:57