问题: nodejs目前无法处理非utf8编码以外的字符

在cnodejs用户组,有同学遇到抓取百度页面出现编码问题

由于Buffer.toString(encoding)中encoding只支持utf8编码,所以需要附加模块才能处理此问题

解决:node-iconv 模块

安装:

$ npm install iconv

示例

var http = require('http');var options = {host: 'www.baidu.com',port: 80,path: '/s?wd=nodejs'
};var Iconv = require('iconv').Iconv;http.get(options, function(res) {console.log("Got response: " + res.statusCode, res.headers);var buffers = [], size = 0;res.on('data', function(buffer) {buffers.push(buffer);size += buffer.length;});res.on('end', function() {var buffer = new Buffer(size), pos = 0;for(var i = 0, l = buffers.length; i < l; i++) {buffers[i].copy(buffer, pos);pos += buffers[i].length;}// 'content-type': 'text/html;charset=gbk'// 百度返回的页面数据流竟然还无法使用gbk完全解码。。var gbk_to_utf8_iconv = new Iconv('GBK', 'UTF-8//TRANSLIT//IGNORE');var utf8_buffer = gbk_to_utf8_iconv.convert(buffer);console.log(utf8_buffer.toString());});
}).on('error', function(e) {console.log("Got error: " + e.message);
});

具体页面编码可以根据res.headers['content-type'] 来判断。
如果没有res.headers['content-type'],则需要分析html的 Content-Type 来判断charset了

“{meta http-equiv="Content-Type" content="text/html; charset=xxxx"/}”

更多url相关请求,可以使用urllib库实现

有爱

希望本文对你有用 ^_^

转载于:https://www.cnblogs.com/fengmk2/archive/2011/05/15/2047109.html

Nodejs抓取非utf8字符编码的页面相关推荐

  1. Node 抓取非utf-8编码页面

    代码示例 Nodejs抓取非utf8字符编码的页面 -- Ruby's Louvre var http = require('http'); var iconv = require('iconv-li ...

  2. php过滤4字节的字符串,过滤utf8 字符中超过三个字节的字符,或者非utf8字符

    function filterUtf8($str) { /*utf8 编码表: * Unicode符号范围 | UTF-8编码方式 * u0000 0000 - u0000 007F | 0xxxxx ...

  3. ASCII、Unicode、GBK和UTF-8字符编码的区别联系(转载)

    ASCII.Unicode.GBK和UTF-8字符编码的区别联系 转载自:http://dengo.org/archives/901 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...

  4. 计算机网络-字符编码的由来(为什么会有乱码,ASCII、Unicode、GBK和UTF-8字符编码区别)

    为什么我们在网络中传输数据,需要指定字符编码,例如使用UTF-8.GBK等编码.那么字符编码到底是什么?以前我也很困惑这个问题,但是学习了计算机网络后我们知道,由于底层电路的设计本质,只能是识别0和1 ...

  5. php爬虫模拟浏览器,PHP模拟浏览器访问,抓取非本地文件的几种方法「爬虫」

    在做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据我们不能直接输 ...

  6. 【Python爬虫教学】百度篇·手把手教你抓取百度搜索关键词后的页面源代码

    [开门见山] 最近整理了下之前做过的项目,学的东西不少,乱七八糟.打算写点关于 Python 爬虫的东西,新人一枚,还望大佬们多多担待,别把我头给打歪了. 前面我先磨叽磨叽些基础的东西,对爬虫新人友好 ...

  7. Source Insight乱码的解决方案,SI不支持UTF-8字符编码乱码

    最近使用source insight查看一些开源代码,显示中文就乱码,据说是因为source insight不支持utf-8编码,默认编码方式为ANSI码.所以需要将utf-8等非ANSI码的文件转换 ...

  8. java utf-8字符表_Java中的ASCII、Unicode和UTF-8字符编码集

    首先讲一下几种字符的编码方式: 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态 ...

  9. java json utf-8_关于java:如何使JSONObject的toString()像UTF-8字符一样将UTF-8字符编码为unicode?...

    在Java中(用于Android),下面是代码行: org.json.JSONObject array = new org.json.JSONObject("{"value&quo ...

  10. 经验分享 | Burpsuite抓取非HTTP流量

    使用Burp对安卓应用进行渗透测试的过程中,有时候会遇到某些流量无法拦截的情况,这些流量可能不是HTTP协议的,或者是"比较特殊"的HTTP协议(以下统称非HTTP流量).遇到这种 ...

最新文章

  1. 网站SEO优化中导航对用户体验的重要性
  2. 【转】JVM内存结构 VS Java内存模型 VS Java对象模型
  3. Write operations are not allowed in read-only mode 只读模式下(FlushMode.NEVER/MANUAL)写操作不允
  4. 华大单片机m4内核的滴答定时器_微处理器、单片机及其外设,处理还是控制?...
  5. 奇妙的安全旅行之DES算法(二)
  6. 实现路由器无线接收另一个路由器无线信号搭建网络
  7. Android工程中三种库的区别:Private Libraries、Referenced Libraries、Dependency Libraries
  8. Linux 的文件软链接如何删除
  9. 每天一个Linux命令(6):rmdir命令
  10. js操作动态表格内元素
  11. ila数据导入matlab,MATLAB读取Xilinx ILA核保存的.ila文件中的两列数据,并输出到文件保存...
  12. 【SQLite】C++链接SQLite读数据乱码问题(非中文)
  13. python中空集怎么表示
  14. VIM 参考手册 For Vim version 7.3
  15. windows 7 多用户登陆
  16. Python---文件操作
  17. ST_Geometry 的关系函数
  18. 一文深入浅出理解国产开源木兰许可系列协议
  19. Asp.net 团队同时发布 WebMatrix, Razor, MVC3 和Orchard [转]
  20. linuxpython安装hive_Linux离线环境安装Pyhive包及通用方式

热门文章

  1. 怎么查计算机二级证书到没到学校,今年3月份考的全国计算机二级,结果忘记去领证书了,我是在城建学院考的,还会给我留着吗?这证书能补办吗...
  2. 优达学城 python 人工智能入门_深度学习TensorFlow入门资源汇总-如何从零开发人工智能...
  3. 设计模式之——桥接模式
  4. 1.Spring Boot入门
  5. SpringMVC文件上传(一)
  6. 论文笔记:Few-Shot Segmentation Without Meta-Learning : A Good Transductive Inference Is All You Need
  7. 【BZOJ3174】[TJOI2013]拯救小矮人(贪心,动态规划)
  8. win 10 系统激活
  9. 【转】SQL server 2000 各种版本
  10. Django auth认证