nodejs+axios爬取html出現(xiàn)中文亂碼并解決示例
一、亂碼原因
當(dāng)使用 nodejs + axios 來爬取某個 url 對應(yīng)的 html 時,出現(xiàn)中文亂碼。
在 HTML 頁面的 head 中沒有設(shè)置 <meta charset="UTF-8"> ,而 html 頁面默認是 GBK 的編碼。
使用 axios 發(fā)送請求 responseEncoding 默認是 utf8,造成編碼不一致,導(dǎo)致最后獲取到的 html 內(nèi)容出現(xiàn)中文亂碼。
二、解決辦法
以二進制流的形式獲取 HTML 內(nèi)容,再對內(nèi)容進行 GBK 編碼解析。具體步驟如下:
- 設(shè)置 axios 請求時的 responseType 為 arraybuffer;
- 使用 TextDecoder 對象提供的方法對二進制流進行編碼解析。
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ù)傳入對應(yīng)的編碼即可。
API解讀:
TextDecoder 接口表示一個文本解碼器,一個解碼器只支持一種特定文本編碼,例如: utf-8、iso-8859-2、koi8、cp1261,gbk 等等。解碼器將字節(jié)流作為輸入,并提供代碼點流作為輸出。
以上就是nodejs+axios解決html出現(xiàn)中文亂碼示例的詳細內(nèi)容,更多關(guān)于nodejs axios解決html中文亂碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于NodeJS+MongoDB+AngularJS+Bootstrap開發(fā)書店案例分析
這章的目的是為了把前面所學(xué)習(xí)的內(nèi)容整合一下,這個示例完成一個簡單圖書管理模塊,因為中間需要使用到Bootstrap這里先介紹Bootstrap2017-01-01
Node.js中的Buffer對象及創(chuàng)建方式
node.js提供了一個Buffer對象來提供對二進制數(shù)據(jù)的操作,Buffer?類的實例類似于整數(shù)數(shù)組,但?Buffer?的大小是固定的、且在?V8?堆外分配物理內(nèi)存。本文給大家介紹Node.js中的Buffer對象及創(chuàng)建方式,感興趣的朋友一起看看吧2022-01-01
Node.js?中的服務(wù)器相關(guān)概念(常見的服務(wù)器任務(wù))
Node.js?中,服務(wù)器的創(chuàng)建與管理是非常重要的內(nèi)容,Node.js?的非阻塞?I/O?特性使得它特別適合處理高并發(fā)的請求,本文將介紹一些與?Node.js?服務(wù)器相關(guān)的基本概念,包括?HTTP?服務(wù)器、請求和響應(yīng)、路由、以及如何處理常見的服務(wù)器任務(wù),感興趣的朋友一起看看吧2025-04-04
Node.js數(shù)據(jù)庫操作之查詢MySQL數(shù)據(jù)庫(二)
這篇文章主要介紹了Node.js數(shù)據(jù)庫操作之查詢MySQL數(shù)據(jù)庫的相關(guān)資料,文中介紹的非常詳細,對大家學(xué)習(xí)或者使用mysql能帶來一定的幫助,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03
從零開始學(xué)習(xí)Node.js系列教程二:文本提交與顯示方法
這篇文章主要介紹了Node.js文本提交與顯示方法,結(jié)合實例形式分析了nodejs基于http的文本提交、傳輸與顯示相關(guān)操作技巧,需要的朋友可以參考下2017-04-04

