node中字节流接收问题【转】
今天写代码的时候用到iconv-lite库的decode方法,给出了warning。说是deprecated,于是我顺着他的连接看了一下具体的文章,记录如下。
转自Use Buffers when decoding
首先以下是错误的:
var http = require('http'),iconv = require('iconv-lite');http.get("http://website.com/", function(res) {var body = '';res.on('data', function(chunk) {body += chunk;});res.on('end', function() {var decodedBody = iconv.decode(body, 'win1252');console.log(decodedBody);});
});
在调用iconv.decode这个函数之前,原始数据已经被javascript内部给decode了。
res.on('data', function(chunkBuffer) {body += chunkBuffer.toString('utf8');});
也就是说再调用iconv.decode的话实际就是decode了两次,这样会丢失binary原始数据的。如果你使用了res.setEncoding('utf-8')
的话也会有一样的效果。
真正正确的办法是用Buffer类型的数组接收数据,然后拼接,最后decode。代码如下:
http.get("http://website.com/", function(res) {var chunks = [];res.on('data', function(chunk) {chunks.push(chunk);});res.on('end', function() {var decodedBody = iconv.decode(Buffer.concat(chunks), 'win1252');console.log(decodedBody);});
});// Or, with iconv-lite@0.4 and Node v0.10+, you can use streaming support with `collect` helper
http.get("http://website.com/", function(res) {res.pipe(iconv.decodeStream('win1252')).collect(function(err, decodedBody) {console.log(decodedBody);});
});
最后作者还提到怎么沉默那条waring的方法:
iconv.skipDecodeWarning = true;```
node中字节流接收问题【转】相关推荐
- node 进阶 | 通过node中如何捕获异常阐述express的特点
node如何捕获异常 node基于js的单线程,有了非阻塞异步回调的概念,但是在处理多个并发连接时,并发环境要求高,最重要的是单线程,单核CPU,一个进程crash则web服务都crash,但是为什么 ...
- Node中同步与异步的方式读取文件
场景 Node.js最大的特点就是异步式I/O(或者非阻塞I/O)与事件紧密结合的编程模式.这种模式与传统的同步式I/O线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一个逻 ...
- node中异步IO的理解
解释性语言和编译型语言的区别: 计算器不能直接的理解高级语言,只能理解机器语言,所以必须把高级语言翻译为机器语言,翻译的方式有两种,一个是编译,一个是解释. 解释性语言的程序不需要编译,它是在运行程序 ...
- node 单元测试_如何在Node中模拟对单元测试的请求
node 单元测试 by Edo Rivai 由Edo Rivai 如何在Node中模拟对单元测试的请求 (How to mock requests for unit testing in Node) ...
- npm中node更新_如何在Node中管理NPM和功能时保持理智
npm中node更新 by Ted Gross 泰德·格罗斯(Ted Gross) 如何在Node中管理NPM和功能时保持理智 (How to keep your sanity while manag ...
- 在 node 中使用 koa-multer 库上传文件详解
本文主要介绍了上传单个文件.多个文件,文件数量大小限制.限制文件上传类型和对上传的图片进行不同大小的裁剪,阅读本篇文章需要具备一定的 node 和 koa 框架的基础知识以及 async await ...
- 2020年我们可以在Node中使用ES Modules了吗
1 前言 不同时期的的 JS 发展,诞生了不同的模块化机制:近些年,随着前端模块化的标准落地,不同端的 JS 对此也都做了各自的实现.今天我们就来聊聊这个话题. 本文我们将主要探讨以下四个方面: Ja ...
- Struts2中Action接收参数
Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数: a.定义:在Action类中定义属 ...
- 长连接及在Node中的应用——HTTP/1.1 keep-alive
HTTP请求都要经过TCP三次握手建立连接,四次分手断开连,如果每个HTTP请求都要建立TCP连接的话是极其费时的,因此HTTP/1.1中浏览器默认开启了Connection: keep-alive. ...
最新文章
- LabVIEW读写各类格式图像的方法(基础篇—1)
- 我的本地化关于NSDefaults
- vc连接数据库,对数据的基本操作
- Shell练习-统计出每个IP的访问量有多少?
- 序列化与反序列化的简单认识
- LeetCode 1973. Count Nodes Equal to Sum of Descendants(DFS)
- ajax onerror code,Ajax请求'onError'处理程序
- 用汇编的眼光看C++(之特殊函数)
- JavaScript 获取当前时间戳的三种方式
- 安装SQL Server 2012遇到“需要更新的以前的Visual Studio 2010实例.”
- 【转载】Matlab画图命令介绍
- 网络工程专业大学生,需要考HICE吗?
- 无线路由器pppoe服务器,详解Volans飞鱼星路由器怎么设置PPPOE服务器
- 明日之后服务器维护到几点,明日之后维护最新资讯
- 小Biu的区间和——UPC
- Java秋招面经大合集
- Android Q版本读取SDcard
- 递推法 c语言,递推法
- 使用synchronized实现Lock接口的lock和unlock方法
- 常规计算机控制系统的控制过程,计算机过程控制系统