我肯定读过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
一定是错的和不同的事情。
答案 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 ==