Node.js Base64 Encoding和Decoding

  如何在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。

时间: 2024-10-14 21:00:35

Node.js Base64 Encoding和Decoding的相关文章

进击Node.js基础(二)

一.一个牛逼闪闪的知识点Promise npm install bluebird 二.牛逼闪闪的Promise只需三点1.Promise是JS针对异步操作场景的解决方案 针对异步的场景,业界有很多解决方案,如回调.事件机制 Promise是一个对象,同时它也一种规范,针对异步操作约定了统一的接口,表示一个异步操作的最终结果以同步的方式来写代码,执行的操作是异步的,但是又保证程序的执行顺序是同步的. 原本是社区的一个规范的构想,被加入到ES6的语言标准里面,比如Chrom,Firefox浏览器已对

Base64 Encoding / Decoding in Node.js

[Base64 Encoding / Decoding in Node.js] Here is how you encode normal text to base64 in Node.js: var b = new Buffer('JavaScript');var s = b.toString('base64');// SmF2YVNjcmlwdA== And here is how you decode base64 encoded strings: var b = new Buffer('

Node.js v0.10.31API手册-加密

加密(Crypto) 使用 require('crypto') 来调用该模块. crypto模块提供在HTTPS或HTTP连接中封装安全凭证的方法. 它提供OpenSSL中的一系列哈希方法,包括hmac.cipher.decipher.签名和验证等方法的封装. crypto.getCiphers() 返回一个数组,包含支持的加密算法的名字. 示例: var ciphers = crypto.getCiphers(); console.log(ciphers); // ['AES-128-CBC'

[掌眼]iOS / Android / java / node.js 通用的 AES256 加解密算法

example.m NSString *text = @"text"; NSString *key32 = @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding]; NSString *encryptedData = [[data AES256EncryptWithKey:key32] base64EncodedStringWi

【node.js】Buffer(缓冲区)

Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区. 创建 Buffer 类 Node Buffer 类可以通过多种方式来创建. 1.创建长度为 10 字节的 Buffer 实例: var buf = new Buffer(10); 2.通过给定的数组创建 Buffer 实例: var buf = new Buffer([10, 20, 30, 40, 50]); 3.通过一个字符串来创建 Buffer 实例: var buf = new Buffer("

Node.js系列:Buffer类的使用

客户端JavaScript中没有对二进制数据提供很好的支持.但是在处理TCP流或文件流时,必须要处理二进制数据.Node.js定义了一个Buffer类,用来创建一个专门存放二进制数据的缓存区. Buffer中存的数据默认为16进制. 1.创建Buffer对象 在Node.js中,Buffer类是一个可以在任何模块中不使用的全局类,不要单独加载.可以使用New关键字来创建该类的实例对象. Buffer类有三种形式的构造函数: 第一种:将缓存区大小(以字节为单位)作为构造函数的参数 var size

Node.js开发入门—Stream用法详解

Stream是Node.js中非常重要的一个模块,应用广泛.一个流是一个具备了可读.可写或既可读又可写能力的接口,通过这些接口,我们可以和磁盘文件.套接字.HTTP请求来交互,实现数据从一个地方流动到另一个地方的功能. 所有的流都实现了EventEmitter的接口,具备事件能力,通过发射事件来反馈流的状态.比如有错误发生时会发射"error"事件,有数据可被读取时发射"data"事件.这样我们就可以注册监听器来处理某个事件,达到我们的目的. Node.js定义了R

Node.js 切近实战(十) 之Excel在线(共享文件)

本篇文章我就不罗嗦了,主要讲的是共享文件列表,主要功能就是查看别人共享的文件. 打开该界面,用户可以在左侧看到共享文件的人员的信息,点击该人可以查看该人共享了哪些文件.在Grid里面有查看文件修改记录,编辑,标记为星标文件等功能.OK,我们先看一下UI代码. div(style='padding:5px;')  include ../common/search.jade .row-margin  hr.panel-line   #splitter(style='height:750px;')  

Node.js 编码转换

Node.js自带的toString()方法不支持gbk,因此中文转换的时候需要加载第三方库,推荐以下两个编码转换库,iconv-lite和encoding. iconv, iconv-lite和encoding是什么? iconv:是在类Unix系统中一种标准字符集转换接口,用于在不同字符集编码之间进行转换,最早出现在HP-UX系统中. iconv-lite:是iconv的纯js实现,支持的编码包括node.js原生编码:utf8, ucs2, ascii, binary, base64:同时