zoukankan      html  css  js  c++  java
  • 使用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中,我们对这个数组解码就可以获取到正常的数据了

  • 相关阅读:
    【Qt】Qt5.12连接MySQl5.7(亲自测试成功)
    【Qt】Qt5.12编译MySQl5.7驱动(亲自测试成功)
    【网络安全】十三款流行无线黑客工具介绍
    微信公众号教程(15)公司通讯录开发 下
    微信公众号教程(14)公司通讯录开发 中
    微信公众号教程(13)公司通讯录开发 上
    微信公众号教程(12)公众账号接收非文字消息 下
    微信公众号教程(11)公众账号接收非文字消息 上
    微信公众号教程(10)公众账号自定义回复功能
    微信公众号教程(9)公众账号发送欢迎图文消息
  • 原文地址:https://www.cnblogs.com/niubi007/p/11424748.html
Copyright © 2011-2022 走看看