最近因為有需要寫爬蟲的需求,使用 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/
換一下囉!
參考資料
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!