久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      淺談nodejs中怎么對(duì)字符串進(jìn)行Base64編碼和解碼

      什么是Base64編碼?Base64是如何工作的?下面本篇文章給大家介紹一下使用Node.js對(duì)字符串進(jìn)行 Base64編碼和解碼的方法,希望對(duì)大家有所幫助!

      淺談nodejs中怎么對(duì)字符串進(jìn)行Base64編碼和解碼

      什么是 Base64 編碼?

      Base64 編碼是一種將數(shù)據(jù)(通常是二進(jìn)制)轉(zhuǎn)換為 ASCII 字符集的方法。Base64 因?yàn)槟軌蚱鸬诫[藏?cái)?shù)據(jù)的效果而常常被誤認(rèn)為是一種加密技術(shù)。值得強(qiáng)調(diào)的是, Base64 不是一種加密或壓縮技術(shù)。實(shí)際上,Base64 編碼信息的大小是原始數(shù)據(jù)實(shí)際大小的 1.3333 倍。

      理解:假設(shè)我們有 6 個(gè) ASCII 字符,那么二進(jìn)制數(shù)據(jù)就是 6 * 8 = 48(位)。如果使用 Base64 編碼的話,那么就會(huì)分成 48 / 6 = 8(組),每一組就會(huì)對(duì)應(yīng)一個(gè) ASCII 字符,也即是說,經(jīng)過 Base64 編碼后,我們會(huì)有 8 個(gè) ASCII 字符。因?yàn)閿?shù)據(jù)傳輸?shù)臅r(shí)候都會(huì)被轉(zhuǎn)換為電信號(hào)(雖然你看到的是字符),所以數(shù)據(jù)的大小都是按位來算的,8 個(gè) ASCII 字符就是 8 * 8 = 64(位),64 / 48 = 4 / 3 ≈ 1.3333 。 綜上所述,Base64 編碼信息的大小是原始數(shù)據(jù)實(shí)際大小的 1.3333 倍。

      Base64 是使用最廣泛的基本編碼技術(shù),另外兩種常用的編碼方案是 Base16 和 Base32。

      Base64 是如何工作的?

      將數(shù)據(jù)轉(zhuǎn)換為 base64 是一個(gè)多步驟的過程。以下是它對(duì)文本字符串的工作方式:

      1. 計(jì)算輸入文本的 8 位二進(jìn)制版本;
      2. 將 8 位版本的數(shù)據(jù)重新以 6 位為一單元去分組;
      3. 找到每個(gè) 6 位二進(jìn)制塊的十進(jìn)制版本;
      4. 通過查詢 Base64 編碼表獲得每個(gè)十進(jìn)制值所對(duì)應(yīng)的 Base64 符號(hào)。

      為了更好地理解這個(gè)概念,讓我們看一個(gè)例子。假設(shè)我們有字符串“Go win”,我們想將其轉(zhuǎn)換為 Base64 字符串。第一步是將此字符串轉(zhuǎn)換為二進(jìn)制。 “Go win”的二進(jìn)制版本是:

      01000111 01101111 00100000 01110111 01101001 01101110

      您可以在此處看到每個(gè)字符由 8 位表示。然而,正如我們之前所說,Base64 將 8 位二進(jìn)制為一組形式的數(shù)據(jù)轉(zhuǎn)換為 6 位為一組形式的數(shù)據(jù)。這是因?yàn)?Base64 格式只有 64 個(gè)字符:26 個(gè)大寫字母、26 個(gè)小寫字母、10 個(gè)數(shù)字字符以及用于換行的“+”和“/”符號(hào)。

      Base64 不使用所有的 ASCII 特殊字符,而只使用這幾個(gè)。請(qǐng)注意,Base64 的某些實(shí)現(xiàn)使用與“+”和“/”不同的特殊字符。

      回到這個(gè)例子,讓我們將 8 位數(shù)據(jù)分成 6 位為一組。

      010001 110110 111100 100000 011101 110110 100101 101110

      您不會(huì)總是能夠?qū)?shù)據(jù)分成完整的 6 位集,在這種情況下,您將不得不手動(dòng)填充 0 。

      現(xiàn)在對(duì)于上面的每個(gè)塊,我們必須找到它的十進(jìn)制值。下面給出了這些十進(jìn)制值:

      Binary Decimal  010001 17  110110 54  111100 60  100000 32  011101 29  110110 54  100101 37  101110 46

      最后,我們必須查看我們剛剛從二進(jìn)制數(shù)據(jù)計(jì)算出的每個(gè)十進(jìn)制數(shù)的 Base64 值。 Base64 編碼表如下所示:

      淺談nodejs中怎么對(duì)字符串進(jìn)行Base64編碼和解碼

      在這里你可以看到十進(jìn)制的 17 對(duì)應(yīng)于“R”,十進(jìn)制的 54 對(duì)應(yīng)于“2”,依此類推。使用此編碼表,我們可以看到字符串“Go win”使用 Base64 編碼為“R28gd2lu”。您可以使用任何在線文本轉(zhuǎn) Base64 轉(zhuǎn)換器來驗(yàn)證此結(jié)果。

      為什么要使用 Base64 編碼?

      以二進(jìn)制格式發(fā)送信息有時(shí)會(huì)有風(fēng)險(xiǎn),因?yàn)椴⒎撬袘?yīng)用程序或網(wǎng)絡(luò)系統(tǒng)都可以處理原始二進(jìn)制文件。另一方面,ASCII 字符集廣為人知,并且對(duì)于大多數(shù)系統(tǒng)來說處理起來非常簡單。

      例如,電子郵件服務(wù)器需要文本數(shù)據(jù),因此通常使用 ASCII。因此,如果您想將圖片或任何其他二進(jìn)制文件發(fā)送到電子郵件服務(wù)器,您首先需要將其編碼為基于文本的格式,最好是 ASCII。這就是 Base64 編碼在將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為正確格式方面非常方便的地方。

      使用 Node.js 對(duì)字符串進(jìn)行 Base64 編碼

      在 Node.js 中對(duì) Base64 字符串進(jìn)行編碼的最簡單方法是通過 Buffer 對(duì)象。在 Node.js 中,Buffer 是一個(gè)全局對(duì)象,這意味著你不需要使用 require 語句導(dǎo)入應(yīng)用程序就可以使用 Buffer 對(duì)象。

      在物理內(nèi)存中,緩沖區(qū)是一個(gè)不可變的整數(shù)數(shù)組,它也能夠執(zhí)行許多不同的編碼/解碼。這些包括到從 UTF-8、UCS2、Base64 和 十六進(jìn)制編碼到另外一種格式, 或者從另外一種格式編碼到 UTF-8、UCS2、Base64 和 十六進(jìn)制。當(dāng)您編寫處理和操作數(shù)據(jù)的代碼時(shí),您可能會(huì)在某個(gè)時(shí)候使用 Buffer 對(duì)象。

      看看下面的例子。在這里,我們將使用 Buffer 對(duì)象將文本字符串編碼為 Base64。將以下代碼保存在“encode-text.js”文件中:

      'use strict';   let data = 'stackabuse.com';  let buff = new Buffer(data); // 默認(rèn)用 utf-8 編碼格式解釋字符串 let base64data = buff.toString('base64'); console.log('"' + data + '" converted to Base64 is "' + base64data + '"');

      在上面的腳本中,我們創(chuàng)建了一個(gè)新的緩沖區(qū)對(duì)象并將我們想要轉(zhuǎn)換為 Base64 的字符串傳遞給它。然后我們?cè)趧倓倓?chuàng)建的緩沖區(qū)對(duì)象上調(diào)用“toString”方法,并將“base64”作為參數(shù)傳遞給它。以“base64”為參數(shù)的“toString”方法將以 Base64 字符串的形式返回?cái)?shù)據(jù)。運(yùn)行上面的代碼,你會(huì)看到下面的輸出。

      $ node encode-text.js  "stackabuse.com" converted to Base64 is "c3RhY2thYnVzZS5jb20="

      在輸出中,我們可以看到轉(zhuǎn)換為 Base64 的字符串和它的原始數(shù)據(jù)。

      使用 Node.js 解碼 Base64 字符串

      解碼 Base64 字符串與編碼非常相似。您必須創(chuàng)建一個(gè)新的緩沖區(qū)對(duì)象并將兩個(gè)參數(shù)傳遞給它的構(gòu)造函數(shù)。第一個(gè)參數(shù)是 Base64 中的數(shù)據(jù),第二個(gè)參數(shù)是“base64”。然后您只需在緩沖區(qū)對(duì)象上調(diào)用“toString”,但這次傳遞給該方法的參數(shù)將是“ascii”,因?yàn)檫@是您希望 Base64 數(shù)據(jù)轉(zhuǎn)換為的數(shù)據(jù)類型。請(qǐng)查看以下代碼片段以供參考。

      'use strict';  let data = 'Tm8gdG8gUmFjaXNt';  let buff = new Buffer(data, 'base64');  let text = buff.toString('ascii');  console.log('"' + data + '" converted from Base64 to ASCII is "' + text + '"');

      將數(shù)據(jù)添加到 “ascii.js” 文件并保存。這里我們使用了“Tm8gdG8gUmFjaXNt”作為 Base64 輸入數(shù)據(jù)。當(dāng)這些數(shù)據(jù)被解碼時(shí),它應(yīng)該顯示“No to Racism”。

      將二進(jìn)制數(shù)據(jù)編碼為 Base64 字符串

      正如文章開頭提到的,Base64 編碼的主要目的是將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為文本格式。讓我們看一個(gè)示例,我們將圖像(二進(jìn)制數(shù)據(jù))轉(zhuǎn)換為 Base64 字符串??纯聪旅娴睦?。

      'use strict';   const fs = require('fs');  let buff = fs.readFileSync('stack-abuse-logo.png');  let base64data = buff.toString('base64');  console.log('Image converted to base 64 is:nn' + base64data);

      在上面的代碼中,我們通過 fs 模塊的 readFileSync() 方法將圖像加載到緩沖區(qū)中。該過程的其余部分類似于從普通 ASCII 字符串創(chuàng)建 Base64 字符串。

      當(dāng)您運(yùn)行上面的代碼時(shí),您將看到以下輸出。

      $ node encode-image.js Image converted to Base64 is:  iVBORw0KGgoAAAANSUhEUgAAABkAAAATCAYAAABlcqYFAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAADuUlEQVQ4EbVUTUtcZxR+7ufkXp1SZ4iZRE1EDVQRnTAhowsZMFm40I2rNqUIIev8hvoPQroQXBTqwiAWcd0EglEhiZNajVZrQGXAWAzaZpzMnZn7lXPeeIe5DaWb9Ax33vOec8/znI/3vVI6nfbxP4v8b/iSJIGfzyGfkPi+D13XUalUBL6qqmIvy5+8WuX/r2RCkUzAoIuLi2hqaoLrutjb28P6+josyxJkiqJA07SQXiqVwHaOZYx/itLc3Px9YIxEIlheXsbExATGxsYwMjIiwEdHRwXA/Pw8EokEcrkcDg4OYJomVlZWMDU1JSqfmZlBR0cHbNsOtVoNCHjlTFiSySQMwxAVxONxQbi0tIRMJoPe3l5MT0+jtbUVg4ODYGImY18qlcL4+DhisZjoggCjv1C7uOyenh7Mzs5iY2ND6FQpdnd3sba2JloSjUYxPDyM/v5+TE5OYn9/X9jZtrOzg+3t7WqyAUmoEu419/+HBw9E+eVymbJqAJP39fWBCR3HEU+hUMDQ0JCYGc8um81iYGAAjY2N8DwvwBdraCY8tHhDA1Y3N9Hd3S2yvH37O7RcbsF7AuUsD9+8wdOFBTx/8QJtbW1C5/nMzc3R0D2UyxXk83lRXcAk1V5GCT5sSUGDbeHxy9/EO98M9OOXzT9wfHISxKC1vR0GHfOtrS2g/SouWwU0Xkggu7qO9PUkJFULnbIQyTm6ewu2hF+vnOIIUQwdGlg8f4QF6wvMWBq+pAkaskSnx4FFVUf0CNpcC797KizXQ4oAHhVdXJJ81F7j6kwUynPHlXDPdFB2fRj+KVK0KvT2rbp3uKYryJU11Cke8qqMuOoioeeJ1MPDYxM36m1cNSq4GdFx58RAWvbx8TrXnK4IgR16Em5GK4iqHi5GHHxLgcSDn97WgZPoND+GGZRpPYH85cgiiRQl1ltXxmFFQ5PuopP8TrW5ZyRcWp7AbmkeZefg5+N6PPnbRJdpw/YlfB0vQiPQZwVdZNtFZEVK6D1VTnccJlXzuqTjvOZiq6Rhj2KqLSJsofOHgIl8+t0/qsfDioxmSUWGjrRFzhYi/5Oynrdl3KXHIZDXtF6hil8R6I9FBV/RvDLnXKxSbAdVYhNeINXBMwmXWCTQGG2Y+Jj+dFrfEmiMAtmeowpo9ojTvkD+A/L1UJUMmiVfkuz6WTyZhFRJAgP33j3bsM5k/Fng68UP21hYJyyxZwLWuS2cKMfUSm3rhD0g4E2g197fwMZ+Bgt8rNe2iP2BhL5dgfFzrx8AfECEDdx45a0AAAAASUVORK5CYII=

      雖然實(shí)際圖像非常小(25×19),但輸出仍然相當(dāng)大,部分原因是 Base64 增加了數(shù)據(jù)的大小,正如我們之前提到的。

      將 Base64 字符串解碼為二進(jìn)制數(shù)據(jù)

      這里的反向過程與我們?cè)谇懊娌糠种锌吹降慕獯a Base64 字符串的方式非常相似。最大的區(qū)別是輸出目的地以及數(shù)據(jù)在那里寫入的方式。讓我們看看這個(gè)例子:

      'use strict';  const fs = require('fs');  let buff = new Buffer(data, 'base64');  fs.writeFileSync('stack-abuse-logo-out.png', buff);   let data = 'iVBORw0KGgoAAAANSUhEUgAAABkAAAATCAYAAABlcqYFAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAA' + 'CA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0' + 'YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly' + '93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAg' + 'ICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZm' + 'Y6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAADuUlEQVQ4EbVU' + 'TUtcZxR+7ufkXp1SZ4iZRE1EDVQRnTAhowsZMFm40I2rNqUIIev8hvoPQroQXBTqwiAWcd0EglEhiZNajVZrQGXAWAzaZpzMnZn7lXPeeIe5Da' + 'Wb9Ax33vOec8/znI/3vVI6nfbxP4v8b/iSJIGfzyGfkPi+D13XUalUBL6qqmIvy5+8WuX/r2RCkUzAoIuLi2hqaoLrutjb28P6+josyxJkiqJA' + '07SQXiqVwHaOZYx/itLc3Px9YIxEIlheXsbExATGxsYwMjIiwEdHRwXA/Pw8EokEcrkcDg4OYJomVlZWMDU1JSqfmZlBR0cHbNsOtVoNCHjlTF' + 'iSySQMwxAVxONxQbi0tIRMJoPe3l5MT0+jtbUVg4ODYGImY18qlcL4+DhisZjoggCjv1C7uOyenh7Mzs5iY2ND6FQpdnd3sba2JloSjUYxPDyM' + '/v5+TE5OYn9/X9jZtrOzg+3t7WqyAUmoEu419/+HBw9E+eVymbJqAJP39fWBCR3HEU+hUMDQ0JCYGc8um81iYGAAjY2N8DwvwBdraCY8tHhDA1' + 'Y3N9Hd3S2yvH37O7RcbsF7AuUsD9+8wdOFBTx/8QJtbW1C5/nMzc3R0D2UyxXk83lRXcAk1V5GCT5sSUGDbeHxy9/EO98M9OOXzT9wfHISxKC1' + 'vR0GHfOtrS2g/SouWwU0Xkggu7qO9PUkJFULnbIQyTm6ewu2hF+vnOIIUQwdGlg8f4QF6wvMWBq+pAkaskSnx4FFVUf0CNpcC797KizXQ4oAHh' + 'VdXJJ81F7j6kwUynPHlXDPdFB2fRj+KVK0KvT2rbp3uKYryJU11Cke8qqMuOoioeeJ1MPDYxM36m1cNSq4GdFx58RAWvbx8TrXnK4IgR16Em5G' + 'K4iqHi5GHHxLgcSDn97WgZPoND+GGZRpPYH85cgiiRQl1ltXxmFFQ5PuopP8TrW5ZyRcWp7AbmkeZefg5+N6PPnbRJdpw/YlfB0vQiPQZwVdZN' + 'tFZEVK6D1VTnccJlXzuqTjvOZiq6Rhj2KqLSJsofOHgIl8+t0/qsfDioxmSUWGjrRFzhYi/5Oynrdl3KXHIZDXtF6hil8R6I9FBV/RvDLnXKxS' + 'bAdVYhNeINXBMwmXWCTQGG2Y+Jj+dFrfEmiMAtmeowpo9ojTvkD+A/L1UJUMmiVfkuz6WTyZhFRJAgP33j3bsM5k/Fng68UP21hYJyyxZwLWuS' + '2cKMfUSm3rhD0g4E2g197fwMZ+Bgt8rNe2iP2BhL5dgfFzrx8AfECEDdx45a0AAAAASUVORK5CYII=';  console.log('Base64 image data converted to file: stack-abuse-logo-out.png');

      在這里您可以看到我們從 Base64 數(shù)據(jù)(也可以從 socket 或其他一些通信線路接收)開始,然后將其加載到 Buffer 對(duì)象中。在創(chuàng)建緩沖區(qū)時(shí),我們告訴它它是 base64 格式,這允許緩沖區(qū)相應(yīng)地解析它以進(jìn)行內(nèi)部存儲(chǔ)。

      要將數(shù)據(jù)保存回原始 PNG 格式,我們只需將 Buffer 對(duì)象傳遞給我們的 fs.writeFileSync 方法,它就會(huì)為我們進(jìn)行轉(zhuǎn)換。

      結(jié)論

      Base64 編碼是將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為純 ASCII 文本的最常用方法之一。它是一種非常有用的格式,用于在一個(gè)或多個(gè)無法輕松處理二進(jìn)制數(shù)據(jù)的系統(tǒng)之間進(jìn)行通信,例如 HTML 標(biāo)記中的圖像或 Web 請(qǐng)求。

      在 Node.js 中,我們可以通過 Buffer 對(duì)象來輕松完成 Base64 字符串與許多其他格式數(shù)據(jù)相互轉(zhuǎn)換的工作。

      英文原文地址:https://stackabuse.com/encoding-and-decoding-base64-strings-in-node-js/

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)