根据URL提取页面的Title,根据网页的charset自动判断Encoding

简介:
using System;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

internal class Program
{
    // 获取网页的HTML内容,根据网页的charset自动判断Encoding
    public static string GetHtml(string url)
    {
        return GetHtml(url, null);
    }

    // 获取网页的HTML内容,指定Encoding
    private static string GetHtml(string url, Encoding encoding)
    {
        byte[] buf = new WebClient().DownloadData(url);
        if (encoding != null) return encoding.GetString(buf);
        string html = Encoding.UTF8.GetString(buf);
        encoding = GetEncoding(html);
        if (encoding == null || encoding == Encoding.UTF8) return html;
        return encoding.GetString(buf);
    }

    // 根据网页的HTML内容提取网页的Encoding
    private static Encoding GetEncoding(string html)
    {
        string pattern = @"(?i)\bcharset=(?<charset>[-a-zA-Z_0-9]+)";
        string charset = Regex.Match(html, pattern).Groups["charset"].Value;
        try
        {
            return Encoding.GetEncoding(charset);
        }
        catch (ArgumentException)
        {
            return null;
        }
    }

    // 根据网页的HTML内容提取网页的Title
    private static string GetTitle(string html)
    {
        string pattern = @"(?si)<title(?:\s+(?:""[^""]*""|'[^']*'|[^""'>])*)?>(?<title>.*?)</title>";
        return Regex.Match(html, pattern).Groups["title"].Value.Trim();
    }

    // 打印网页的Encoding和Title
    private static void PrintEncodingAndTitle(string url)
    {
        string html = GetHtml(url);
        Console.WriteLine("[{0}] [{1}]", GetEncoding(html), GetTitle(html));
    }

    // 程序入口
    private static void Main()
    {
        PrintEncodingAndTitle("http://www.msdn.net/");
        PrintEncodingAndTitle("http://www.cnblogs.com/");
        PrintEncodingAndTitle("http://www.cnblogs.com/skyiv/");
        PrintEncodingAndTitle("http://www.csdn.net/");
        PrintEncodingAndTitle("http://news.163.com/");
    }
}

/* 程序输出:
[] [MSDN: Microsoft Developer Network]
[System.Text.UTF8Encoding] [博客园 - 程序员的网上家园]
[System.Text.UTF8Encoding] [空间/IV - 博客园]
[System.Text.UTF8Encoding] [CSDN.NET - 中国最大的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台]
[System.Text.DBCSCodePageEncoding] [新闻中心_网易新闻]

*/

转自: http://www.cnblogs.com/skyiv/archive/2008/06/08/1215983.html
目录
相关文章
|
21天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
23天前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
3月前
|
网络协议 前端开发 JavaScript
浏览器加载网页的幕后之旅:从URL到页面展示详解
【8月更文挑战第31天】当在浏览器地址栏输入URL并回车后,一系列复杂过程随即启动,包括DNS解析、TCP连接建立、HTTP请求发送、服务器请求处理及响应返回,最后是浏览器页面渲染。这一流程涉及网络通信、服务器处理和客户端渲染等多个环节。通过示例代码,本文详细解释了每个步骤,帮助读者深入理解Web应用程序的工作机制,从而在开发过程中作出更优决策。
64 5
|
3月前
|
缓存 前端开发 JavaScript
输入URL到页面渲染的全过程
输入URL到页面渲染的全过程
34 1
|
3月前
|
JavaScript Linux 应用服务中间件
【Azure 应用服务】FTP 部署 Vue 生成的静态文件至 Linux App Service 后,访问App Service URL依旧显示Azure默认页面问题
【Azure 应用服务】FTP 部署 Vue 生成的静态文件至 Linux App Service 后,访问App Service URL依旧显示Azure默认页面问题
|
3月前
|
API UED 开发者
Vaadin路由魔法:导航之舟,带你穿越页面迷宫!驾驭神奇URL,解锁无限可能!
【8月更文挑战第31天】Vaadin是一款现代Java Web开发框架,其路由机制结合前后端路由,确保流畅的用户体验和高效服务器资源利用。通过`@Route`注解和`Router`类,开发者可以轻松定义和管理页面路径。例如,`@Route(&quot;home&quot;)`可指定视图路径,而参数化路由如`@Route(&quot;user/:userId&quot;)`则允许URL传参。此外,Vaadin还提供了丰富的导航API和自定义路由事件监听器,助力开发者构建结构清晰且体验优秀的Web应用。
47 0
|
3月前
|
缓存 网络协议 JavaScript
面试常考题:输入url到页面渲染发生了什么?(前半段)
面试常考题:输入url到页面渲染发生了什么?(前半段)
|
3月前
|
JavaScript 前端开发 网络协议
面试常考题: 输入url到页面渲染发生了什么(后半段)
面试常考题: 输入url到页面渲染发生了什么(后半段)
|
5月前
|
Java 机器人 API
JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
48 9
|
5月前
|
缓存 网络协议 前端开发
【高频】从输入URL到页面展示到底发生了什么?
【高频】从输入URL到页面展示到底发生了什么?