最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C#獲取網(wǎng)頁HTML源碼的例子

 更新時間:2014年08月13日 10:07:12   投稿:junjie  
這篇文章主要介紹了使用C#獲取網(wǎng)頁HTML源碼的例子,考慮了區(qū)分GB2312和UTF-8編碼,需要的朋友可以參考下

最近在做一個項目,其中一個功能是根據(jù)一個URL地址,獲取到網(wǎng)頁的源代碼。在ASP.NET(C#)中,獲取網(wǎng)頁源代碼貌似有很多種方法,我隨便搞了一個簡單的WebClient,非常簡單容易。但后面一個非常惱火的問題出來了,那就是中文的亂碼。

通過仔細(xì)研究,中文的網(wǎng)頁不外乎GB2312和UTF-8這兩種編碼。于是有了下面這段代碼:

復(fù)制代碼 代碼如下:

       /// <summary>
       /// 根據(jù)網(wǎng)址的URL,獲取源代碼HTML
       /// </summary>
       /// <param name="url"></param>
       /// <returns></returns>
       public static string GetHtmlByUrl(string url)
       {
           using (WebClient wc = new WebClient())
           {
               try
               {
                   wc.UseDefaultCredentials = true;
                   wc.Proxy = new WebProxy();
                   wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
                   wc.Credentials = System.Net.CredentialCache.DefaultCredentials;
                   byte[] bt = wc.DownloadData(url);
                   string txt = System.Text.Encoding.GetEncoding("GB2312").GetString(bt);
                   switch (GetCharset(txt).ToUpper())
                   {
                       case "UTF-8":
                           txt = System.Text.Encoding.UTF8.GetString(bt);
                           break;
                       case "UNICODE":
                           txt = System.Text.Encoding.Unicode.GetString(bt);
                           break;
                       default:
                           break;
                   }
                   return txt;
               }
               catch (Exception ex)
               {
                   return null;
               }
           }
       }

稍微解釋一下,這里使用了WebClient創(chuàng)建了一個wc對象(這命名有點尷尬了)。然后調(diào)用wc對象的DownloadData方法,傳入URL值,返回一個字節(jié)數(shù)組。默認(rèn)使用GB2312來讀取這個字節(jié)數(shù)組,把它轉(zhuǎn)換成字符串。從網(wǎng)頁源代碼的字符串中查找網(wǎng)頁的編碼格式的特征字符,如找到charset="utf-8"這樣的信息,來判斷當(dāng)前網(wǎng)頁的編碼格式。

GetCharset這個函數(shù)就是來獲取當(dāng)前網(wǎng)頁的編碼格式的,具體代碼如下:

復(fù)制代碼 代碼如下:
      /// <summary>
       /// 從HTML中獲取獲取charset
       /// </summary>
       /// <param name="html"></param>
       /// <returns></returns>
       public static string GetCharset(string html)
       {
           string charset = "";
           Regex regCharset = new Regex(@"content=[""'].*\s*charset\b\s*=\s*""?(?<charset>[^""']*)", RegexOptions.IgnoreCase);
           if (regCharset.IsMatch(html))
           {
               charset = regCharset.Match(html).Groups["charset"].Value;
           }
           if (charset.Equals(""))
           {
               regCharset = new Regex(@"<\s*meta\s*charset\s*=\s*[""']?(?<charset>[^""']*)", RegexOptions.IgnoreCase);
               if (regCharset.IsMatch(html))
               {
                   charset = regCharset.Match(html).Groups["charset"].Value;
               }
           }
           return charset;
       }

感覺寫得不是很好,先將就著用,呵呵。小編原創(chuàng),轉(zhuǎn)載注明,呵呵。

相關(guān)文章

  • C#使用foreach語句遍歷二維數(shù)組的方法

    C#使用foreach語句遍歷二維數(shù)組的方法

    這篇文章主要介紹了C#使用foreach語句遍歷二維數(shù)組的方法,實例分析了C#遍歷數(shù)組的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C#泛型運作原理的深入理解

    C#泛型運作原理的深入理解

    這篇文章主要給大家介紹了關(guān)于C#泛型運作原理的深入理解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 淺談關(guān)于C#的垃圾回收機制

    淺談關(guān)于C#的垃圾回收機制

    淺談關(guān)于C#的垃圾回收機制,需要的朋友可以參考一下
    2013-03-03
  • Unity3D使用陀螺儀控制節(jié)點旋轉(zhuǎn)

    Unity3D使用陀螺儀控制節(jié)點旋轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了Unity3D使用陀螺儀控制節(jié)點旋轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C#實現(xiàn)文件Move和Copy操作

    C#實現(xiàn)文件Move和Copy操作

    這篇文章介紹了C#實現(xiàn)文件Move和Copy操作的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • WinForm ToolTip使用方法小結(jié)

    WinForm ToolTip使用方法小結(jié)

    這篇文章主要介紹了WinForm ToolTip使用方法小結(jié),對C#初學(xué)者有一定的借鑒參考價值,需要的朋友可以參考下
    2014-08-08
  • C#計算矩陣的逆矩陣方法實例分析

    C#計算矩陣的逆矩陣方法實例分析

    這篇文章主要介紹了C#計算矩陣的逆矩陣方法,較為詳細(xì)的分析了逆矩陣的計算原理與相關(guān)的C#實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • 使用C#編寫簡單的圖形化的可發(fā)送附件的郵件客戶端程序

    使用C#編寫簡單的圖形化的可發(fā)送附件的郵件客戶端程序

    這篇文章主要介紹了使用C#編寫一個圖形化的可發(fā)送附件的郵件客戶端程序的方法,文中的示例同樣是基于支持smtp協(xié)議的郵件服務(wù)器,需要的朋友可以參考下
    2016-02-02
  • 基于私鑰加密公鑰解密的RSA算法C#實現(xiàn)方法

    基于私鑰加密公鑰解密的RSA算法C#實現(xiàn)方法

    這篇文章主要介紹了基于私鑰加密公鑰解密的RSA算法C#實現(xiàn)方法,是應(yīng)用非常廣泛,需要的朋友可以參考下
    2014-08-08
  • 在C#中如何獲取程序的命令行參數(shù)

    在C#中如何獲取程序的命令行參數(shù)

    本文介紹了在C#中獲取程序命令行參數(shù)的幾種方法,包括重寫Main方法和使用Environment.GetCommandLineArgs方法,還討論了如何在不同的環(huán)境中設(shè)置命令行參數(shù),如IDE、命令提示符、拖放和發(fā)送到菜單,文章提供了一個在目錄層次結(jié)構(gòu)中搜索文件的示例程序
    2025-01-01

最新評論

交城县| 酒泉市| 龙陵县| 金坛市| 连平县| 都江堰市| 佛教| 太白县| 静海县| 特克斯县| 察雅县| 潼南县| 开封市| 江阴市| 油尖旺区| 普兰县| 垦利县| 千阳县| 新密市| 陵水| 邹平县| 城固县| 香港| 衢州市| 黄大仙区| 英山县| 嘉鱼县| 徐水县| 金乡县| 铜川市| 乌海市| 浦东新区| 南召县| 开平市| 义马市| 元谋县| 威信县| 彭阳县| 景东| 阿图什市| 任丘市|