不多说了,先上代码:

/// <summary>
        /// 获取页面内容
        /// </summary>
        /// <param name="Url">链接地址</param>
        /// <returns></returns>
        public static string GetWebContent(string Url)
        {

            string strResult = "", strCharacterSet="";
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                StreamReader streamReader;
                //声明一个HttpWebRequest请求
                request.Timeout = 30000;
                //设置连接超时时间
                request.Headers.Set("Pragma", "no-cache");
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream streamReceive = response.GetResponseStream();
                Encoding encoding;
                string strPageCharacterSet = response.CharacterSet.ToLower();//获取页面响应中定义的编码字符串
                encoding = Encoding.GetEncoding(strPageCharacterSet);
                streamReader = new StreamReader(streamReceive, encoding);
                strResult = streamReader.ReadToEnd();
                strResult = StringHelps.RepalceStr(strResult, 0);
                strCharacterSet = GetEncoding(strResult).ToLower();//获取页面html中声明的编码字符串
                if (!strCharacterSet.Equals(strPageCharacterSet))//比较两者的编码格式是否一致,如果不一致,以页面中定义的编码格式再次去获取页面内容
                {
                    strResult = GetWebContentByCharecterSet(Url, strCharacterSet);
                }
                if (string.IsNullOrEmpty(strResult))
                {
                    streamReader = new StreamReader(streamReceive, encoding);
                    strResult = streamReader.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Save("获取页面出现乱码" + Url + ex.ToString());
            }
            return strResult;
        }
        /// <summary>
        /// 指定编码格式获取页面代码
        /// </summary>
        /// <param name="Url"></param>
        /// <param name="strCharacterSet"></param>
        /// <returns></returns>
        public static string GetWebContentByCharecterSet(string Url,string strCharacterSet)
        {

            string strResult = "";
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                StreamReader streamReader;
                //声明一个HttpWebRequest请求
                request.Timeout = 30000;
                //设置连接超时时间
                request.Headers.Set("Pragma", "no-cache");
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream streamReceive = response.GetResponseStream();
                Encoding encoding;
                encoding = Encoding.GetEncoding(strCharacterSet);
                streamReader = new StreamReader(streamReceive, encoding);
                strResult = streamReader.ReadToEnd();
            }
            catch (Exception ex)
            {
                LogHelper.Save("获取页面出现异常" + Url + ex.ToString());
            }
            return strResult;
        }
        /// <summary>
        /// 根据网页的HTML内容提取网页的Encoding
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        static string GetEncoding(string html)
        {
            string pattern = @"(?i)\bcharset=(?<charset>[-a-zA-Z_0-9]+)";
            string charset = Regex.Match(html, pattern).Groups["charset"].Value;
            if (string.IsNullOrEmpty(charset))
                charset = "utf-8";
            return charset;
        }

.net 环境下get 获取页面出现乱码问题解决的更多相关文章

  1. Linux环境下shell和vim中乱码原因及消除办法

    shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...

  2. SpringMVC获取页面数据乱码的解决get/post

    一.post请求方式的乱码 在web.xml中加入: <filter> <filter-name>CharacterEncodingFilter</filter-name ...

  3. Linux下Birt、JTreeChart中文乱码问题解决办法

    Linux下JTreeChart,Birt等报表工具显示中文乱码解决 1) 现象: 在Windows上生成的报表图片展示正常,但是在Linux上显示(怪异的小方块“口”): 2)问题定位: 这是lin ...

  4. 全分布式环境下,DataNode不启动的问题解决

    问题出现:机器重启之后,再次在master结点上面执行start-all.sh,发现有一个datanode没有启动,通过jps检查之后,发现slave1上面的datanode进程未启动 原因:每次na ...

  5. .net环境下ckeditor与ckfinder中文文件链接乱码的问题

    .net环境下ckeditor与ckfinder中文文件链接乱码的问题 将ckfinder.js中的getUrl:function(){return this.folder.getUrl()+enco ...

  6. 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案

    基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器 ...

  7. Android 源码获取-----在Windows环境下通过Git得到Android源代码

    在学习Android的过程中,深入其源代码研究对我们来说是非常重要的,这里将介绍如何通过在Windows环境下使用Git来得到我们的Android源代码. 1.首先确保你电脑上安装了Git,这个通过  ...

  8. 【Data Cluster】真机环境下MySQL数据库集群搭建

    真机环境下MySQL-Cluster搭建文档  摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建.购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建.起初笔 ...

  9. .Net环境下的缓存技术介绍 (转)

    .Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 ...

随机推荐

  1. html+css图片下弹出蒙版

    鼠标移入时弹出蒙版!!! html<!DOCTYPE html<html lang="en"<head> <meta charset="UT ...

  2. Textview下划线注册用户跳转实现

    在xml中: <TextView android:id="@+id/textView_regtext" android:layout_width="wrap_con ...

  3. codeforces A. The Wall 解题报告

    题目链接:http://codeforces.com/problemset/problem/340/A 这道题目理解不难,就是在[a, b]区间内,找出同时能够被x和y整除的个数.第一次想当然的开了两 ...

  4. 20160808_卸载OpenJDK

    1.查看信息 [root@localhost ~]# rpm -qa | grep jdkjava-1.6.0-openjdk-devel-1.6.0.0-1.50.1.11.5.el6_3.x86_ ...

  5. linux笔记:shell基础和bash的基本功能

    shell的优势:可以直接调用linux系统命令 shell脚本的基本写法:脚本名以.sh结尾程序的第一行为#!/bin/bash,告诉系统这是一个shell脚本以#作为注释shell脚本的执行方式: ...

  6. js基础之面向对象

    一.基本概念 Array类 ————> 不具备实际的功能,只能用来构造对象 arr对象  ————> 有实际的功能,被类给构造出来 如:var arr=new Array(); proto ...

  7. (转)Memcached

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据 库驱动网站的速度.Memcache ...

  8. Ubuntu 安装 Courier New字体

    apt-get install ttf-mscorefonts-installer  它的本质是安装 Courier New字体 安装的时候会出现一个协议 按TAB键 ,可以选中<确定>按 ...

  9. RapidXml用法

    一.写xml 文件 #include <iostream> #include "rapidxml/rapidxml.hpp" #include "rapidx ...

  10. jeesite 一对多,对子表单独修改时出现 HV000030: No validator could be found for type:

    这是由于springmvc校验功能造成的,解决办法参见我的百度回答 http://zhidao.baidu.com/question/2141673418419314468