axios請求GBK頁面中文亂碼解決方法


  這兩天學習vue寫demo,沒有服務器,便抓了網易新聞的數據。vue cli3.0 + 官方推薦的axios,設置了一下代理,十分方便的在dev環境下請求到了數據。然而還沒來得及高興:

驚了!什么情況?!去網易新聞官方的頁面看來下,原來人家的是GBK頁面,不是utf-8的,而axios默認是utf-8。

一開始認為,設置請求頭,使服務器返回contentType為 'application/x-www-form-urlencoded;charset=utf-8',網上大部分文章也是這么說的。

那就改一下吧?然后一天的時間過去了...emmm....說起來你可能不信,據網上的大牛說axios的源碼中,對get請求設置進行了很不友好的生硬處理,使之一切對get請求頭的設置無效!這個bug據說存在了很長時間了,下面是github issues關於它的描述

https://github.com/axios/axios/issues/362

英文不是很好,用的翻譯功能看的。

試了很多帖子中的方法,包括什么:params.inCharset='utf-8',params.outCharset='utf-8'

還有設置headers里加上'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'

以及添加請求攔截器什么的,各種方法我都試了,然而對我遇到的問題還是無效,可能是不太對症吧,畢竟人家樓主都采納了,應該是解決他們遇到的問題了

別人的路走不通,就想自己的辦法吧:改請求頭讓服務器直接返回utf-8是不行事兒了,畢竟插件是別人的插件,服務器是別人的服務器,全給堵死了。那就請求回來轉碼試試吧。

axios使用說明中有:responseType 表示服務器響應的數據類型

我試了一下,有效。以此為契機,有如下方法

1 responseType: 'blob',
2                 transformResponse: [function (data) {
3                     let reader = new FileReader();
4                     reader.readAsText(data, 'GBK');
5                     reader.onload = function (e) {
6                         console.log(reader.result);
7                     }
8                     return data;
9                 }]

讓返回類型為blob,然后按gbk編碼進行轉碼。得到:

成功!

解決方法沒寫多少,可能很簡單,可能在對協議的理解上就有錯誤,給大牛看也就是貽笑大方,但對我這個菜鳥來說真的費了不少時間。

記錄一下歷程吧,也讓有同樣遭遇的同仁能少受點苦(^-^)

如果有大牛看到了,希望告訴我在對 服務數據請求 的理解上有什么錯誤沒有,謝謝

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM