在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
相关产品推荐
相关产品推荐

