Node.js 中的 Buffer 和字符编码

众所周知,数据在网络中是通过二进制传输的,在 Node.js 中,Buffer 对象就是用于处理这些二进制数据。举个例子:

console.log(Buffer.from('abcde'))

会输出:

<Buffer 61 62 63 64 65>

你可能会觉得奇怪,这里的 61、62 到 65 的数字是什么,其实这是字符 a 到 e 的 ASCII 码所对应的 16 进制,下图是标准 ASCII 码表:

ASCII 码

可以看到标准 ASCII 码使用 7 位二进制数来表示大小写字母、数字、标点符号以及控制字符。所以总共能够表示 2 的 7 次方,也就是 128 个字符。用哪些二进制数字表示哪个符号,每个人都可以约定自己的一套,这就是所谓的编码。而 ASCII 码就是标准化组织给出的标准答案,统一规定了上述常用符号用哪些二进制数来表示。在 ASCII 码中,前 0~31 个以及最后一个(即127),共 33 个控制字符,例如 LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格) 等:

可显示字符

剩下的都是可显示字符,或者叫可打印字符:

可显示字符

知道了 ASCII 码的编码规则之后,我们回到最开始的问题:

console.log(Buffer.from(&
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。以下是一个使用 node.js 编写的字符串压缩解压的代码示例: ```javascript const zlib = require('zlib'); // 压缩字符串 function compressString(str) { return new Promise((resolve, reject) => { zlib.deflate(str, (err, buffer) => { if (err) { reject(err); } else { resolve(buffer.toString('base64')); } }); }); } // 解压字符串 function decompressString(str) { return new Promise((resolve, reject) => { zlib.inflate(Buffer.from(str, 'base64'), (err, buffer) => { if (err) { reject(err); } else { resolve(buffer.toString()); } }); }); } // 示例 const originalString = '这是一个需要压缩的字符串。'; console.log('原始字符串:', originalString); compressString(originalString) .then(compressedString => { console.log('压缩后的字符串:', compressedString); return decompressString(compressedString); }) .then(decompressedString => { console.log('解压后的字符串:', decompressedString); }) .catch(err => { console.error('出错了:', err); }); ``` 这段代码使用了 node.js 内置的 zlib 模块来进行字符串的压缩和解压。其,`compressString` 函数接受一个字符串作为参数,返回一个 Promise 对象,该 Promise 对象的结果是压缩后的字符串。`decompressString` 函数接受一个压缩后的字符串作为参数,返回一个 Promise 对象,该 Promise 对象的结果是解压后的字符串。 在示例,我们先定义了一个原始字符串,然后使用 `compressString` 函数将其压缩成一个 base64 编码字符串,并输出压缩后的字符串。接着,我们使用 `decompressString` 函数将压缩后的字符串解压成原始字符串,并输出解压后的字符串。如果在压缩或解压的过程出现了错误,我们会在控制台输出错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值