首页 > 代码库 > 请求页面因为不同页面不同编辑格式照成的乱码
请求页面因为不同页面不同编辑格式照成的乱码
请求一些网页时,因不同网页的编码格式不同,无法固定使用一种编码格式去请求,会出现乱码,也没发现通用的编码格式,暂时使用如下方法,请求后获取数据流,先用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-]+)\b", 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); }
--谨记铭心
请求页面因为不同页面不同编辑格式照成的乱码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。