今天写代码的时候用到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中字节流接收问题【转】相关推荐

  1. node 进阶 | 通过node中如何捕获异常阐述express的特点

    node如何捕获异常 node基于js的单线程,有了非阻塞异步回调的概念,但是在处理多个并发连接时,并发环境要求高,最重要的是单线程,单核CPU,一个进程crash则web服务都crash,但是为什么 ...

  2. Node中同步与异步的方式读取文件

    场景 Node.js最大的特点就是异步式I/O(或者非阻塞I/O)与事件紧密结合的编程模式.这种模式与传统的同步式I/O线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一个逻 ...

  3. node中异步IO的理解

    解释性语言和编译型语言的区别: 计算器不能直接的理解高级语言,只能理解机器语言,所以必须把高级语言翻译为机器语言,翻译的方式有两种,一个是编译,一个是解释. 解释性语言的程序不需要编译,它是在运行程序 ...

  4. node 单元测试_如何在Node中模拟对单元测试的请求

    node 单元测试 by Edo Rivai 由Edo Rivai 如何在Node中模拟对单元测试的请求 (How to mock requests for unit testing in Node) ...

  5. npm中node更新_如何在Node中管理NPM和功能时保持理智

    npm中node更新 by Ted Gross 泰德·格罗斯(Ted Gross) 如何在Node中管理NPM和功能时保持理智 (How to keep your sanity while manag ...

  6. 在 node 中使用 koa-multer 库上传文件详解

    本文主要介绍了上传单个文件.多个文件,文件数量大小限制.限制文件上传类型和对上传的图片进行不同大小的裁剪,阅读本篇文章需要具备一定的 node 和 koa 框架的基础知识以及 async await ...

  7. 2020年我们可以在Node中使用ES Modules了吗

    1 前言 不同时期的的 JS 发展,诞生了不同的模块化机制:近些年,随着前端模块化的标准落地,不同端的 JS 对此也都做了各自的实现.今天我们就来聊聊这个话题. 本文我们将主要探讨以下四个方面: Ja ...

  8. Struts2中Action接收参数

    Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属 ...

  9. 长连接及在Node中的应用——HTTP/1.1 keep-alive

    HTTP请求都要经过TCP三次握手建立连接,四次分手断开连,如果每个HTTP请求都要建立TCP连接的话是极其费时的,因此HTTP/1.1中浏览器默认开启了Connection: keep-alive. ...

最新文章

  1. LabVIEW读写各类格式图像的方法(基础篇—1)
  2. 我的本地化关于NSDefaults
  3. vc连接数据库,对数据的基本操作
  4. Shell练习-统计出每个IP的访问量有多少?
  5. 序列化与反序列化的简单认识
  6. LeetCode 1973. Count Nodes Equal to Sum of Descendants(DFS)
  7. ajax onerror code,Ajax请求'onError'处理程序
  8. 用汇编的眼光看C++(之特殊函数)
  9. JavaScript 获取当前时间戳的三种方式
  10. 安装SQL Server 2012遇到“需要更新的以前的Visual Studio 2010实例.”
  11. 【转载】Matlab画图命令介绍
  12. 网络工程专业大学生,需要考HICE吗?
  13. 无线路由器pppoe服务器,详解Volans飞鱼星路由器怎么设置PPPOE服务器
  14. 明日之后服务器维护到几点,明日之后维护最新资讯
  15. 小Biu的区间和——UPC
  16. Java秋招面经大合集
  17. Android Q版本读取SDcard
  18. 递推法 c语言,递推法
  19. 使用synchronized实现Lock接口的lock和unlock方法
  20. 常规计算机控制系统的控制过程,计算机过程控制系统

热门文章

  1. transient、Externalizable
  2. http status 状态码汇总
  3. winform 更新服务器程序
  4. asp.net页生命周期
  5. Lambda表达式实例
  6. php脚本日志文件,php脚本-定期删除日志文件,删除历史日志 保留最近7天
  7. 安卓手机ip修改器_亚马逊手机端?电脑端?谁是测评一哥
  8. 缺失数据em算法python_EM算法
  9. 聊题“谈、闲、想、省”
  10. php有哪些debug方式,Console有哪些Debug方法