zoukankan      html  css  js  c++  java
  • 请求页面因为不同页面不同编辑格式照成的乱码

    请求一些网页时,因不同网页的编码格式不同,无法固定使用一种编码格式去请求,会出现乱码,也没发现通用的编码格式,暂时使用如下方法,请求后获取数据流,先用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);
            }
    

                             --谨记铭心

  • 相关阅读:
    PostThreadMessage
    WaitForSingleObject函数的使用
    CodeWarrior环境下中断使用
    Activity跳转时生命周期跟踪
    win7 VS2012+openCV-2.4.11 配置
    CodeBlocks16.01+wxWidgets3.0.2
    MFC一个类访问另一个类成员对象的成员变量值
    无法打开包括文件:'atlrx.h'的解决办法
    STM32f103的数电采集电路的TIMER定时器的使用与时序控制的程序
    STM32f103的数电采集电路的双ADC的设计与使用
  • 原文地址:https://www.cnblogs.com/xinloverong/p/6744967.html
Copyright © 2011-2022 走看看