最近因為有需要寫爬蟲的需求,使用 Node.js 來處理寫完之後發現網頁的預設編碼會有問題中文的部分會亂碼,所以就用 curl 測試一下在 meta 發現
<meta http-equiv="Content-Type" content="text/html; charset=big5">
天阿!竟然是 Big5 不過想想好像有聽說對方的伺服器是使用 ASP.NET 寫的好吧!也只能處理了,那在 Node.js 裡面我們應該怎麼處理呢?
HTTP 請求 library GOT
再說明怎麼處理 Big5 之前,先來介紹今天發 request 的主角 GOT 會使用 GOT 其實是因為 request 在 2019 年就停止維護了所以找到的替代方案,用一用覺得其實也不錯用,未來可能會開始使用這個套件吧!
那我們就先來介紹怎麼使用 got 發 request 吧!
安裝 GOT
$ npm install got
GOT 範例程式
const got = require('got');
(async () => {
try {
const response = await got('https://example.com/');
console.log(response.body);
} catch (error) {
console.log(error.response.body);
}
})();
使用 iconv-lite 處理 Big5 轉 UTF-8
如此 Sample 並沒有辦法處理 Big5 編碼,那如果要處理 Big5 編碼我們就需要有請 iconv-lite 來幫我們解決
安裝 iconv-lite
$ npm install iconv-lite
GOT 範例程式處理 Big5 轉換 UTF-8
就在剛剛的 sample 做一點修改就可以處理了,我們把 response.rawBody 是 big5 編碼告訴 iconv-lite 讓它幫我們轉換一下就完成拉!
const got = require('got');
const iconv = require("iconv-lite");
(async () => {
try {
const response = await got('https://example.com/');
response.body = iconv.decode(Buffer.from(response.rawBody), "big5")
console.log(response.body);
} catch (error) {
console.log(error.response.body);
}
})();
不過站長目前沒有找到範例是 Big5 的伺服器可以拿來做 Demo,所以伺服器的部分就交給需要的朋友自行把 https://example.com/ 換一下囉!
參考資料