为什么atob和btoa的用法没有什么不同?

时间:2018-06-26 06:07:19

标签: javascript base64

我肯定读过atob()btoa()MDN website中的JavaScript Base64解码和编码功能。

但是在使用中,我犯了一个错误。但是一切正常,这对我来说很奇怪。参见下面的代码:

const en = btoa('amer');
const de = atob(en);

绝对console.log(de)显示"amer"。但是我犯了以下错误:

const en = atob('amer'); 
const de = btoa(en);

令人惊讶的是,console.log(de)再次显示"amer"!我不明白为什么! atob()方法用于解码,我将其用作编码函数,但是它可以工作,然后btoa()函数解码此错误的结果并返回"amer"!我希望de一定是错的和不同的事情。

1 个答案:

答案 0 :(得分:1)

  

在这些API中,出于记忆的目的,可以将“ b”视为“二进制”,而将“ a”视为“ ASCII”。但是实际上,由于主要的历史原因,这些函数的输入和输出都是Unicode字符串。

https://www.w3.org/TR/html/webappapis.html#base64-utility-methods

console.log(atob("testString")) // µë-JÚâ
console.log(btoa("µë-JÚâ")) //testString==
console.log(btoa("testString")) // dGVzdFN0cmluZw==
console.log(atob("dGVzdFN0cmluZw==")) // testString
console.log(atob("dGVzdFN0cmluZw")) // testString, even works with no ==