作爲新手,碰到問題了就google了一下,網上已經有teary:window下nodejs爬取gb2312網頁出現亂碼的解決方案出來了。
本文和上面的作法幾乎相同,只是自己不想引用bufferhelper
,自己用JavaScript原生的Buffer
替代實現了。
代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | var http = require("http"); var iconv = require('iconv-lite'); var url = 'http://www.qq.com/'; http.get(url, function(res){ var arrBuf = []; var bufLength = 0; res.on("data", function(chunk){ arrBuf.push(chunk); bufLength += chunk.length; }) .on("end", function(){ // arrBuf是個存byte數據塊的數組,byte數據塊可以轉爲字符串,數組可不行 // bufferhelper也就是替你計算了bufLength而已 var chunkAll = Buffer.concat(arrBuf, bufLength); var strJson = iconv.decode(chunkAll,'gb2312'); // 漢字不亂碼 console.log(strJson); }); }); |
GB2312編碼的網頁鏈接有:騰訊主頁;GBK編碼的網頁鏈接有:搜狐主頁。
怎麼查看網頁是哪些編碼呢?可以直接瀏覽器打開然後右鍵查看源代碼,在meta
標籤中去查看Content-Type
就好了.如下圖.