文章出處

  如何在Node.js中encode一個字符串呢?是否也像在PHP中使用base64_encode()一樣簡單?

  在Node.js中有許多encoding字符串的方法,而不用像在JavaScript中那樣定義各種不同的全局函數。下面是如何在Node.js中將一個普通字符串encode成Base64格式的代碼:

var b = new Buffer('JavaScript');
var s = b.toString('base64');
// SmF2YVNjcmlwdA==

  下面是decode base64字符串的代碼:

var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')
var s = b.toString();
// JavaScript

  如果你想了解上面代碼的實現細節,請接著往下看。

  構造函數new Buffer()的第一個參數可以是一個Number,Array或String。第二個參數為可選參數,用來表示encode的類型,可以是AscII, Utf8, Ucs2, Base64, Binary, 或Hex。默認值是Utf8。

  通過第二個參數,告訴程序給定的字符串是以哪種特定格式被encode的。注意上面decode的例子中我們傳入的參數。

  我們通過toString()方法將encode的字符串轉換成其它格式,默認為Utf8。指定不同的參數,可以轉換成我們想要的格式。例如我們可以將Base64之后的字符串轉換成Hex格式:

var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')
var s = b.toString('hex');
// 4a617661536372697074

  然后通過下面的方式將其decode成人類能看懂的字符串:

var b = new Buffer('4a617661536372697074', 'hex')
var s = b.toString('utf8');
// JavaScript

  一旦掌握了基本的Buffer和encode,我們就可以通過Node.js的File module將文件encode成Base64字符串。

var fs = require('fs');

// function to encode file data to base64 encoded string
function base64_encode(file) {
    // read binary data
    var bitmap = fs.readFileSync(file);
    // convert binary data to base64 encoded string
    return new Buffer(bitmap).toString('base64');
}

// function to create file from base64 encoded string
function base64_decode(base64str, file) {
    // create buffer object from base64 encoded string, it is important to tell the constructor that the string is base64 encoded
    var bitmap = new Buffer(base64str, 'base64');
    // write buffer to file
    fs.writeFileSync(file, bitmap);
    console.log('******** File created from base64 encoded string ********');
}

// convert image to base64 encoded string
var base64str = base64_encode('kitten.jpg');
console.log(base64str);
// convert base64 string back to image 
base64_decode(base64str, 'copy.jpg');

PS:Utf8是AscII的超集。如果你只能使用標準英文鍵盤上的字符,則可以使用AscII編碼;但是如果你正在處理其它“外來”字符或符號,例如⌘, こんにちは, Üdvözöljük等,請使用Utf。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()