请求页面因为不同页面不同编辑格式照成的乱码
Posted 浮萍已死
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求页面因为不同页面不同编辑格式照成的乱码相关的知识,希望对你有一定的参考价值。
请求一些网页时,因不同网页的编码格式不同,无法固定使用一种编码格式去请求,会出现乱码,也没发现通用的编码格式,暂时使用如下方法,请求后获取数据流,先用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); }
--谨记铭心
以上是关于请求页面因为不同页面不同编辑格式照成的乱码的主要内容,如果未能解决你的问题,请参考以下文章