js node python btoa atob


https://mp.weixin.qq.com/s/4SvDiYVXj8a6BbdRq0BQyg

btoa和atob是window對象的兩個函數,其中btoa是binary to ASCII,用於將binary的數據用ASCII碼表示,即Base64的編碼過程,而atob則是ASCII to binary,用於將ASCII碼解析成binary數據,即Base64的解碼過程[1]  

    

    ASCII碼大家基本都知道,這里講下binary是什么。

 

   binary 是JS字符集的另外一個子集,它類似於 ASCII 字符集,但是字符的碼點(charCode)不再限制到 127, 它包含了255 以內的字符。binary string設計的目的不是用於代表字符, 而是代表二進制數據。由 binary string 代表的二進制數據大小是原始數據的兩倍,然而這對於最終用戶是不可見的, 因為JavaScript strings 的長度是以2字節為單位進行計算的。比如, "Hello world" 這個字符串屬於 ASCII 子集, 而 ÀÈÌÒÙ 不屬於ASCII碼[2],但屬於binary。

 

    所以btoa和atob其實還涉及了編碼問題,我們只需要找出相同編碼進行替換即可。在node.js環境中,提供了一個 Buffer 類,用於操作二進制及Base64轉碼。而在Python環境中,有一個 Latin1 編碼[3]與JS的binary相同,因此可以構造代碼了。

代碼實現

一、node.js環境

    1.直接安裝btoa-atob庫(不推薦)

    2.通過Buffer類實現轉換

  

// atob
var s = new Buffer.from("待解碼的字符", "base64").toString("binary")
// btoa
var s = new Buffer.from("待編碼的字符", "binary").toString("base64")

 



二、Python環境

 

    通過Latin1編碼進行轉換

import base64
# atob
s = base64.b64decode("待解碼的字符".encode("utf8")).decode("latin1")
# btoa
s = base64.b64encode("待編碼的字符".encode("latin1")).decode("utf8")

 

https://mp.weixin.qq.com/s/4SvDiYVXj8a6BbdRq0BQyg

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM