最近在使用爬取一個比較老的網站時發現,目標網站由於編碼方式是比較古早的編碼 - big5 ,因此在回傳的結果只要是中文的部分都變成了亂碼。

image-20230203152936673.png

# 解決方案

npm 上有一個編碼轉換工具 iconv 可以很好地將不同格式的編碼進行轉碼。因此我們可以在 axios request api 的時候,將 responseType 設定為 arraybuffer 並且在 transformResponse 時讓 iconv 幫我們將 big5 轉換成現在主流的 utf-8。

詳細的 code 可以見以下。

import iconv from 'iconv-lite';
const url = 'https://www.ooo.xxx?q=';
const { data } = await axios.get(url, { 
	responseType: 'arraybuffer', 
	transformResponse: [function (data) { 
		return iconv.decode(Buffer.from(data), 'big5') }] 
	}
); 
console.log('data:', data) // 中文