nodejs中使用http請求返回值爲html時亂碼問題

今天用nodejs進行http請求時返回的數據是一個html文件,而後我仍是按照之前解析json數據的方法。果不其然報錯了:SyntaxError: Unexpected token  in JSON at position 0html

沒辦法,只好換一種方法,將接受到的Buffer對象toString,而後打印出來發現是亂碼。node

第一感受是編碼問題,google一下而後看官方文檔,總結三種方法:npm

一、toString 加編碼格式做爲參數。json

二、使用iconv-lite 改變編碼。異步

三、使用cheerio來加載html。測試

 

奈何上面三種方法都不是我錯誤的地方,而後看到cnode裏面有我的有類似的問題,雖然不盡相同,可是下面回答的人中有人提到了使用gzip壓縮,收到後不解壓會致使亂碼,而後在個人請求頭中果真發現了gzip壓縮 = =手動捂臉。ui

知道了問題所在,那麼解決起來就很方便了。google

首先讓咱們來npm install zlib 一下;編碼

而後在頭部引入 var zlib = require('zlib'); spa

而後查閱官方文檔,發現有兩種解壓方式,一種是同步,另外一種是異步。

我這裏就使用異步的方式了。

zlib.unzip(chunk,function(error,res){
  console.log(error);
  console.log(res+"");
});

這裏的chunk就是咱們的接受到的buffer對象,須要注意的是這個異步的callback有兩個參數,第一個好像是錯誤信息,第二個纔是咱們須要的html字符串。

若是須要使用同步的同窗,請調用zlib.unzipSync(buffer); ps:表示我測試的時候報錯了。Error: unexpected end of file 

好了,到這裏,個人問題就完美解決了。

相關文章
相關標籤/搜索