none
.net有没有判断字符串编码的函数 RRS feed

  • 问题

  • public class WebGet
        {
            int m_httpCode = 0;
            string m_strErrMsg = "";
            string m_Data = "";
            public bool Get(string strUrl)
            {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(strUrl);
                    request.Credentials = CredentialCache.DefaultCredentials;

                    HttpWebResponse response =(HttpWebResponse)request.GetResponse();
                    m_httpCode = (int)response.StatusCode;
                    using (Stream dataStream = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(dataStream,true))
                        {
                            m_Data = reader.ReadToEnd();
                        }
                    }

                    response.Close();
                    return m_httpCode == 200;
                }
                catch (Exception ex)
                {
                    m_strErrMsg = ex.Message;
                    return false;
                }
            }
            /// <summary>
            /// http状态码
            /// </summary>
            public int HttpCode
            {
                get { return m_httpCode; }
            }
            /// <summary>
            /// 错误信息
            /// </summary>
            public string ErrorMessage
            {
                get { return m_strErrMsg; }
            }
            /// <summary>
            /// 获取的网页的内容
            /// </summary>
            public string Data
            {
                get { return m_Data; }
            }
        }

    WebGet web = new WebGet();
     web.Get("http://www.baidu.com/");

      textBox1.Text = "Code:" + web.HttpCode + Environment.NewLine + web.Data;

    结果出现乱码。怎么解决?

    如果用WebClient正常,但是没办法获取httpcode状态码吧?即然WebClient能判断编码类型,为什么HttpWebResponse不行?

                    

    2012年4月13日 0:56

答案

  • HttpWebResponse不仅有StatusCode,还有ContentEncoding。另外我没有测试乱码,正常输出Html:

    namespace MyTest
    {
        public class MonthActualapp
        {
            public static void Main(string[] args)
            {
                WebRequest req = WebRequest.Create("http://www.baidu.com/");
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                //Console.WriteLine(resp.ContentEncoding);  获取编码
                Stream st = resp.GetResponseStream();
                using (StreamReader sr = new StreamReader(st))
                {
                    Console.WriteLine(sr.ReadToEnd());
                }
            }
        }
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月13日 1:51
    版主
  •  Encoding coding=Encoding.Default;
                    try
                    {
                       coding= Encoding.GetEncoding(response.CharacterSet);
                    }catch{}

                    using (Stream dataStream = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(dataStream, coding))
                        {
                            m_Data =reader.ReadToEnd();
                        }
                    }

    2012年4月16日 1:38

全部回复