使用RestSharp請求GBK編碼的網站亂碼(NetCore環境)
開發環境:Net core ,
Nuget包: RestSharp
問題:獲取的網站編碼格式是GBK,所以返回的數據亂碼(RestSharp雖然開源并且很方便,但關于請求編碼處理的有點坑)
解決方法:RestClient不僅會返回body界面同時會返回一個byte[]類型的數組,這個數組是GBK編碼形成的,通過HttpUtility.UrlDecode(response.RawBytes, Encoding.GetEncoding("gbk"))把數組轉換成正常的GBK的值就可以了(Netcore 無法識別GBK編碼格式,方法在下面)
網站是Get請求 代碼如下:
/// <summary> /// Get 獲取數據 /// </summary> /// <param name="Url">網址</param> /// <returns></returns> public static object GetHelperAsync(string Url) { var client = new RestClient(Url); var request = new RestRequest(Method.GET); //我請求的網站請求頭需要一些參數 request.AddHeader("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"); IRestResponse response = client.Execute(request); return response.Content; }
接收到的網頁亂碼,然后通過查看網頁源代碼發現編碼方式為(charset=GBK)
因為大部分網頁亂碼都是由于請求標頭和所訪問的界面格式不一致引起的。
1.引入支持GBK編碼的包 System.Text.Encoding.CodePages
Netcore不識別GBK編碼格式,所以Encoding.GetEncoding("GBK")會報錯,引入上述的nuget包,然后在使用Encoding方法之前 注冊該包內的編碼
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
這樣就不會報錯了。最后代碼:
/// <summary> /// Get 獲取數據 /// </summary> /// <param name="Url">網址</param> /// <returns></returns> public static object GetHelperAsync(string Url) { var client = new RestClient(Url); var request = new RestRequest(Method.GET); //我請求的網站請求頭需要一些參數 request.AddHeader("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"); IRestResponse response = client.Execute(request); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var data=HttpUtility.UrlDecode(response.RawBytes, Encoding.GetEncoding("gbk")); return data; }
RestSharp會把原來網站以byte[]數組的形式存放在RawBytes中,我們對這個數組解碼就可以獲取到正常的數據了

浙公網安備 33010602011771號