nodejs+axios爬取html出現(xiàn)中文亂碼并解決示例
一、亂碼原因
當(dāng)使用 nodejs + axios 來爬取某個 url 對應(yīng)的 html 時,出現(xiàn)中文亂碼。
在 HTML 頁面的 head 中沒有設(shè)置 <meta charset="UTF-8"> ,而 html 頁面默認(rèn)是 GBK 的編碼。
使用 axios 發(fā)送請求 responseEncoding 默認(rèn)是 utf8,造成編碼不一致,導(dǎo)致最后獲取到的 html 內(nèi)容出現(xiàn)中文亂碼。
二、解決辦法
以二進(jìn)制流的形式獲取 HTML 內(nèi)容,再對內(nèi)容進(jìn)行 GBK 編碼解析。具體步驟如下:
- 設(shè)置 axios 請求時的 responseType 為 arraybuffer;
- 使用 TextDecoder 對象提供的方法對二進(jìn)制流進(jìn)行編碼解析。
eg:
async function getHtml() { let res = await axios({ url: "http://www.xxx.com", headers: { // ... }, responseType: "arraybuffer", // 關(guān)鍵步驟 responseEncoding: "utf8", }); let { data } = res let utf8decoder = new TextDecoder("GBK"); // 關(guān)鍵步驟 let html = utf8decoder.decode(data); console.log(html) }
這樣就能完美解決中文亂碼的情況了。如果 HTML 設(shè)置的其他類型編碼,只需要在 new TextDecoder() 實(shí)例化參數(shù)傳入對應(yīng)的編碼即可。
API解讀:
TextDecoder 接口表示一個文本解碼器,一個解碼器只支持一種特定文本編碼,例如: utf-8、iso-8859-2、koi8、cp1261,gbk 等等。解碼器將字節(jié)流作為輸入,并提供代碼點(diǎn)流作為輸出。
以上就是nodejs+axios解決html出現(xiàn)中文亂碼示例的詳細(xì)內(nèi)容,更多關(guān)于nodejs axios解決html中文亂碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nodejs實(shí)現(xiàn)內(nèi)網(wǎng)穿透服務(wù)
很多人都不知道什么是內(nèi)網(wǎng)穿透,就是公網(wǎng)客戶端,可以訪問局域網(wǎng)內(nèi)的服務(wù),本文詳細(xì)的介紹了原理以及實(shí)現(xiàn),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05Node.js操作mysql數(shù)據(jù)庫增刪改查
這篇文章主要介紹使用Node.js操作mysql數(shù)據(jù)庫增刪改查的相關(guān)資料,需要的朋友可以參考下2016-03-03node中modules.exports與exports導(dǎo)出的區(qū)別
這篇文章主要介紹了node中modules.exports與exports導(dǎo)出的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06nodejs模塊nodemailer基本使用-郵件發(fā)送示例(支持附件)
本篇文章主要介紹了nodejs模塊nodemailer基本使用-郵件發(fā)送示例(支持附件),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03Node.js 文件夾目錄結(jié)構(gòu)創(chuàng)建實(shí)例代碼
下面小編就為大家?guī)硪黄狽ode.js 文件夾目錄結(jié)構(gòu)創(chuàng)建實(shí)例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-07