博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node 抓取非utf-8编码页面
阅读量:4335 次
发布时间:2019-06-07

本文共 1184 字,大约阅读时间需要 3 分钟。

代码示例

var http = require('http');var iconv = require('iconv-lite');var url=require('url'); var html = "";var getURL = url.parse('http://bj.soufun.com/');var req =http.get(getURL, function (res) {    res.setEncoding('binary');//or hex    res.on('data',function (data) {//加载数据,一般会执行多次        html += data;    }).on('end', function () {            var buf=new Buffer(html,'binary');//这一步不可省略            var str=iconv.decode(buf, 'GBK');//将GBK编码的字符转换成utf8的            console.log(str);        })}).on('error', function(err) {        console.log("http get error:",err);    });

UTF8与GBK进行转换,可以把Unicode作为中间编码。

UTF8编解Unicode规则简单,参见 UTF8
GBK编解Unicode无特定规则,一般可通过查表方式
GBK兼容ascii码,ascii字符用一字节编码,最高位为0,其它字符用两位编码,高字节从0x81。编解码时通过此规律对单字节和双字节字符加以区分。
由此可见,GBK是单字节、双字节变长编码。
理解了上面几点后,编解码GBK文件其实只需要一个GBK–>Unicode的码表就够了。
GBK编码时,通过Unicdoe–>GBK,生成相应的GBK字节流;
GBK解码时,通过GBK–>Unicode,生成UCS2字节流,再通过buffer.toString(‘UCS2’)即可转换成string对象。

// npm install iconv-litevar iconv = require('iconv-lite');var str = iconv.decode(buf, 'GBK'); //return unicode string from GBK encoded bytesvar buf = iconv.encode(str, 'GBK');//return GBK encoded bytes from unicode string

转载于:https://www.cnblogs.com/flowerszhong/p/6731250.html

你可能感兴趣的文章
响应式web设计之CSS3 Media Queries
查看>>
实验三
查看>>
机器码和字节码
查看>>
环形菜单的实现
查看>>
【解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法】...
查看>>
34 帧动画
查看>>
二次剩余及欧拉准则
查看>>
thymeleaf 自定义标签
查看>>
关于WordCount的作业
查看>>
UIView的layoutSubviews,initWithFrame,initWithCoder方法
查看>>
STM32+IAP方案 实现网络升级应用固件
查看>>
用74HC165读8个按键状态
查看>>
jpg转bmp(使用libjpeg)
查看>>
linear-gradient常用实现效果
查看>>
sql语言的一大类 DML 数据的操纵语言
查看>>
VMware黑屏解决方法
查看>>
JS中各种跳转解析
查看>>
JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
查看>>
Ecust OJ
查看>>
P3384 【模板】树链剖分
查看>>