今天用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
好了,到這裏,個人問題就完美解決了。