解决nodejs中使用http请求返回值为html时乱码的问题


Posted in NodeJs onFebruary 18, 2017

今天用nodejs进行http请求时返回的数据是一个html文件,然后我还是按照以前解析json数据的方法。果不其然报错了:SyntaxError: Unexpected token  in JSON at position 0

没办法,只好换一种方法,将接受到的Buffer对象toString,然后打印出来发现是乱码。

第一感觉是编码问题,google一下然后看官方文档,总结三种方法:

1、toString 加编码格式作为参数。

2、使用iconv-lite 改变编码。

3、使用cheerio来加载html。

奈何上面三种方法都不是我错误的地方,然后看到cnode里面有个人有相似的问题,虽然不尽相同,但是下面回答的人中有人提到了使用gzip压缩,收到后不解压会导致乱码,然后在我的请求头中果然发现了gzip压缩 = =手动捂脸。

知道了问题所在,那么解决起来就很方便了。

首先让我们来npm install zlib 一下;

然后在头部引入 var zlib = require('zlib');

然后查阅官方文档,发现有两种解压方式,一种是同步,另一种是异步。

我这里就使用异步的方式了。

zlib.unzip(chunk,function(error,res){
console.log(error);

console.log(res+"");
});

这里的chunk就是我们的接受到的buffer对象,需要注意的是这个异步的callback有两个参数,第一个好像是错误信息,第二个才是我们需要的html字符串。

如果需要使用同步的同学,请调用zlib.unzipSync(buffer); ps:表示我测试的时候报错了。Error: unexpected end of file

好了,到这里,我的问题就完美解决了。

以上这篇解决nodejs中使用http请求返回值为html时乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
详解nodejs 文本操作模块-fs模块(三)
Dec 22 NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
Apr 27 NodeJs
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
Jul 05 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
Sep 29 NodeJs
NodeJS简单实现WebSocket功能示例
Feb 10 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 NodeJs
nodejs+express最简易的连接数据库的方法
Dec 23 NodeJs
利用nodejs监控文件变化并使用sftp上传到服务器
Feb 18 #NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 #NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 #NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
Feb 13 #NodeJs
Nodejs 发送Post请求功能(发短信验证码例子)
Feb 09 #NodeJs
Nodejs实现短信验证码功能
Feb 09 #NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 #NodeJs
You might like
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
解析php防止form重复提交的方法
2013/07/01 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
Python3实现连接SQLite数据库的方法
2014/08/23 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
python装饰器练习题及答案
2019/11/01 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
如何提高SQL Server的安全性
2016/07/25 面试题
学前教育毕业生自荐信
2013/10/29 职场文书
学校教学工作总结2015
2015/05/19 职场文书
实习单位鉴定意见
2015/06/04 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL