编码我的URL与base-64编码完美配合。解码也是如此,而不是字符串文字变量。
这有效:
document.write(atob("hi"));
这不是:
var tempvar = "hello";
document.write(atob(tempvar));
我做错了什么?没有显示任何内容。但是,如果我引用"tempvar"
,那么它当然有效,但不是一回事,因为"tempvar"
是一个字符串,而不是一个变量。
答案 0 :(得分:1)
因为它不能解码字符串"hello"
,尝试一下可以从base64解码的实际字符串,这是一个例子;
var tempvar = "aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MzEyOTEzNi9kZWNvZGluZy1ub3Qtd29ya2luZy13aXRoLWJhc2U2NA==";
document.write(atob(tempvar));
如果要进行编码,请改用btoa
函数,
var tempvar = "hello";
document.write(btoa(tempvar));
您可以使用此网站测试解码和编码base64,https://www.base64encode.org/
答案 1 :(得分:1)
我做错了什么?
传递给atob()的字符串是长度为5的字符串文字(技术上不是base-64编码的字符串)。浏览器控制台应在错误日志中显示异常(请参阅下面的 原因 中的说明)。
根据atob()的MDN文档:
抛出
如果传入字符串的长度不是4的倍数,则抛出DOMException。 1
字符串文字的长度" hello " (即 5 )不是4的倍数。因此抛出异常而不是返回字符串文字的解码版本。
一种解决方案是使用实际已编码的字符串(例如,使用btoa())或至少具有4的长度(例如使用String.prototype.substring())。有关示例,请参阅下面的代码段。
var tempvar = "hello";
window.addEventListener("DOMContentLoaded", function(readyEvent) {
var container = document.getElementById("container");
//encode the string
var encoded = btoa(tempvar);
container.innerHTML = encoded;
var container2 = document.getElementById("container2");
//decode the encoded string
container2.innerHTML = atob(encoded);
var container3 = document.getElementById("container3");
//decode the first 4 characters of the string
container3.innerHTML = atob(tempvar.substring(0, 4));
});

<div> btoa(tempvar): <span id="container"></span></div>
<div> atob(decoded): <span id="container2"></span></div>
<div> atob(tempvar.substring(0, 4)): <span id="container3"></span></div>
&#13;
1 <子> https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/atob 子>
答案 2 :(得分:0)
它是因为您正在尝试解码非base64编码的字符串 它的工作原理只是巧合而已。
atob = decode
btoa = encode
答案 3 :(得分:0)
您使用了错误的功能。您应该使用btoa()
进行编码。
当您执行atob('hi')
时,您实际上正在解码&#39; hi&#39;这恰好是有效的base-64。