Node.JS request庫網頁內容編碼異常的解決方法
使用Node.js的request庫抓取網頁時,經常會遇到響應體(body)編碼錯誤導致亂碼的問題。 以下代碼示例展示了這個問題:
const request = require('request'); function getGoods() { request('https://www.58moto.com/used-car/1470264', (err, res, body) => { console.log(body); }); } getGoods();
瀏覽器顯示網頁源碼正常,但上述代碼運行結果卻是亂碼,例如:?zX????K?,??}?????????:_??????z檤???{??6?T=?s?5??~??[~?y?g?Z??~??????#??n?…
這種亂碼問題通常是因為request庫未能正確識別和處理網頁的編碼方式。
解決方法:
一種常見且有效的解決方法是使用axios庫替代request。axios在處理編碼方面通常表現更好,能更可靠地解碼響應內容。
const axios = require('axios'); async function getGoods() { try { const response = await axios.get('https://www.58moto.com/used-car/1470264'); console.log(response.data); } catch (error) { console.error(error); } } getGoods();
通過使用axios,可以有效避免request庫在編碼處理上的不足,從而獲取正確編碼的網頁內容。 如果仍然遇到問題,可以檢查目標網站的Content-Type響應頭,確定其編碼方式(例如utf-8、gbk等),并使用相應的解碼方法進行處理。 例如,對于gbk編碼,可以使用iconv-lite庫進行解碼。
需要注意的是,request庫已經不再維護,建議使用axios或其他現代化的HTTP客戶端庫。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END