Node 抓取非utf-8编码页面

简介: 代码示例 Nodejs抓取非utf8字符编码的页面 -- Ruby's Louvrevar http = require('http');var iconv = require('iconv-lite');var url=require('url'); var html = "";var getURL = url.

代码示例 Nodejs抓取非utf8字符编码的页面 -- Ruby's Louvre

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-lite
var iconv = require('iconv-lite');
var str = iconv.decode(buf, 'GBK'); //return unicode string from GBK encoded bytes
var buf = iconv.encode(str, 'GBK');//return GBK encoded bytes from unicode string
相关文章
|
6月前
|
数据安全/隐私保护 Python
node | 在商品页面秒杀
昨天用`Python`写了个淘宝脚本,今天用`node`写一个。
|
10月前
|
资源调度 JavaScript 安全
可以在浏览器页面运行 node 代码了!webContainer 发布 1.0
可以在浏览器页面运行 node 代码了!webContainer 发布 1.0
185 0
|
11月前
|
数据采集 存储 移动开发
Node.js躬行记(26)——接口拦截和页面回放实验
Node.js躬行记(26)——接口拦截和页面回放实验
|
11月前
|
前端开发 JavaScript
基于node.js开发的文章生成器(七、网页版本的文章生成器--前端页面篇)
# 引言 经过前面六章的学习,我们已经有了很多知识的储备,本次我们来制作文章生成器的前端部分。 # 数据的传递 接下来这里我们的传递方式主要通过form表单和axios两种方式来传递数据。 ## 传统的form表单传递 传统的form表单传递方式首先通过`<form></form>`标签来完成。 ### 传统的form表单传递---练习测试 我们建立 csss.html和csss.js文件夹 csss.html代码如下: ``` <!DOCTYPE html> <html> <head> <title>xx</title> </head>
node笔记记录68登录页面简单2
node笔记记录68登录页面简单2
28 0
node笔记记录68登录页面简单2
node笔记记录67登录页面简单1
node笔记记录67登录页面简单1
27 0
node笔记记录67登录页面简单1
|
JavaScript 前端开发
【前端自动化】如何使用Node.js实现热重载页面
【前端自动化】如何使用Node.js实现热重载页面
Node 02--Node中的模块系统与响应中文编码
Node 02--Node中的模块系统与响应中文编码
100 0
Node 02--Node中的模块系统与响应中文编码
|
前端开发 JavaScript Ruby
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-13-1.使用sass工具搭建前台web端页面
Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅。使用 Sass 以及 Sass 的样式库(如 Compass)有助于更好地组织管理样式文件,以及更高效地开发项目。
160 0
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-13-1.使用sass工具搭建前台web端页面
|
Web App开发 JavaScript 程序员
浅析Node.js:一个“编码就绪”服务器
导读:Node是一个服务器端JavaScript解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。本文探究了Node.js能解决哪些问题,它如何工作,如何运行一个简单应用程序,最后,Node何时是以及何时不是一个好的解决方案。
1155 0