• 请求页面因为不同页面不同编辑格式照成的乱码


    请求一些网页时,因不同网页的编码格式不同,无法固定使用一种编码格式去请求,会出现乱码,也没发现通用的编码格式,暂时使用如下方法,请求后获取数据流,先用utf-8,这个比较普遍,如发现不是再用gb2312

    /// <summary>
            /// 网址流
            /// </summary>
            /// <param name="Url"></param>
            /// <returns></returns>
            public static Stream GetWebUrlStream(string Url)
            {
                Stream stream = null;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    stream = response.GetResponseStream();
                }
                return stream;
            }
    

      

    public ActionResult GetBaiduUrlInfo()
            {
                string url = RequestUtils.GetString("url");
                Stream stream = HttpWebRequestUntil.GetWebUrlStream(url);
                string strHtml = "";
                List<byte> lst = new List<byte>();
                int nRead = 0;
                while ((nRead = stream.ReadByte()) != -1) lst.Add((byte)nRead);
                byte[] byHtml = lst.ToArray();
                //utf8的编码比较多 所以默认先用他解码  
                strHtml = Encoding.UTF8.GetString(byHtml, 0, byHtml.Length);
                //就算编码没对也不会影响英文和数字的显示 然后匹配真正编码  
                string strCharSet =
                    Regex.Match(strHtml, @"<meta.*?charset=""?([a-z0-9-]+)", RegexOptions.IgnoreCase)
                    .Groups[1].Value;
                //如果匹配到了标签并且不是utf8 那么重新解码一次  
                if (strCharSet != "" && (strCharSet.ToLower().IndexOf("utf") == -1))
                {
                    try
                    {
                        strHtml = Encoding.GetEncoding(strCharSet).GetString(byHtml, 0, byHtml.Length);
                    }
                    catch
                    {
                    }
                }
                return Json(new { html = strHtml }, JsonRequestBehavior.AllowGet);
            }
    

                             --谨记铭心

  • 相关阅读:
    PAT1065. A+B and C (64bit)
    PAT1064. Complete Binary Search Tree
    PAT 1063. Set Similarity
    CodeForces
    Golang在京东列表页实践总结
    asp.net 5 如何使用ioc 以及在如何获取httpcontext对象
    陨石坑之webapi 使用filter中如何结束请求流
    陨石坑之webapi使用filter
    Socket通信前必须考虑的几件事
    ZeroMQ的进阶
  • 原文地址:https://www.cnblogs.com/xinloverong/p/6744967.html
Copyright © 2020-2023  润新知