Alex Liang

使用jschardet偵測網頁編碼

寫爬蟲的過程中常需要對網頁選擇適當的編碼。

今天介紹一個jschardet module能自動檢測網頁編碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const iconv     = require('iconv-lite');
const jschardet = require('jschardet');

function fetchRawHtml(linkURL, callback) {
request.get({
url: linkURL,
encoding: null,
}, (error, response, body) => {
if (error) {
console.error(error);
callback(error);
return;
}

if (response.statusCode !== 200) {
callback(`Status code: ${response.statusCode}`);
return;
}

const buf = iconv.decode(new Buffer(body), jschardet.detect(body).encoding);

callback(null, buf);
});
}

jschardet.detect(body).encoding會回傳該網頁的編碼,對module實作有興趣的人可以參考原始碼,基本上是列出該編碼常用字元,算出網頁使用編碼的機率有多高

如此一來,以後遇到big5或其它語系的編碼不用另外記錄,可以直接取得正確的raw data

參考資料:
官方github