asp.net(C#) 下载网页并处理编码

本文介绍了在ASP.NET C#中如何处理不同编码的网页,特别是UTF-8编码的网页。通过示例代码展示了从UTF-8到GBK的转换方法,并提供了使用WebBrowser控件处理登录及验证码的技巧,强调了手动识别验证码的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#下默认的是unicode编码
但是比如,我使用以下代码,从某网站上下载网页,而该网页是Utf-8编码的,这时,显示出来的中文就乱码了。
string sHtml = client.DownloadString(sUrl);

经过多方尝试,我用下列操作搞出来了正确的编码了,但是其中的原理,我并不明白。

byte[] byteArray = Encoding.Default.GetBytes(sHtml); 
string s1 = System.Text.Encoding.UTF8.GetString(byteArray);

后来又发现,这样处理,大部分字符显示出来了,但某些字符转换不正确。
正确的方法应该是

C#下载utf-8的网页

  WebClient client = new WebClient();
         byte[] byteArray= client.DownloadData(sUrl);
          string sHtml = Encoding.UTF8.GetString(byteArray);
有时候总搞不清楚,总以为UTF-8就是unicode,实际是,utf-8也是一种MultiBytes编码,gbk也是一个MultiBytes编码,而Unicode是WideChar编码。

闲话不多说了,要将 utf-8转成gk,写了一个 高温磁力泵函数以方便使用。
void Utf2gb(const char *utf,char *gb)
{
 int nLen = strlen(utf);
 WCHAR * szUnicode = new WCHAR[nLen+1];
 char *  szAnsi = new char[nLen+1];
 int nWCHAR=MultiByteToWideChar(CP_UTF8,0,utf,nLen,szUnicode,nLen);
 int nSize=WideCharToMultiByte(CP_ACP,0,szUnicode,nWCHAR,szAnsi,nLen,NULL,NULL);
 szAnsi[nSize]=0;
 strcpy( gb,szAnsi);
 delete szUnicode;
 delete szAnsi;
}

调用示例:
char szUTF[]="鎴戠殑";
 Utf2gb(szUTF,szUTF);
当然,你的两个参数不一样,也是OK的。
看到论坛有人在问如何编程登录有验证码的 高温磁力泵网站题,于是专门研究了一下。文章后有源码下载地址。

注:验证码还是要人来辨认。

有几种处理办法,一是使用WebBrowser控件,一是使用WebClient或者WebRequest控件来处理。

本文中使用 WebBrowser 控件。

(以优快云登录为例)


这里有两个难点:

1,如何获得验证码的图片。

2,如果模拟表单提交。

先做一些准备工作,即通过察看登录页的源码码,查出用户名等控件的name.

验证码的控件的name是MzImgExpPwd

提交按钮是一个图片,name是 ctl00$CPH_Content$Image_Login

添加引用 Microsft.mshtml

获得验证码的关键代码


 HTMLDocument html = (HTMLDocument)this.webBrowser1.Document.DomDocument;
            HtmlElement elm = (HtmlElement)webBrowser1.Document.All["MzImgExpPwd"];
            
            IHTMLControlElement img = (IHTMLControlElement)elm.DomElement;
            IHTMLControlRange range = (IHTMLControlRange)((HTMLBody)html.body).createControlRange();
            range.add(img);
            range.execCommand("Copy", false, null);
            img = null;
            range = null;
            html = null;
            if(Clipboard.ContainsImage())
            { http://www.dcci.com.cn/
                this.pictureBox1.Image = Clipboard.GetImage();
            }
            else
            {
                MessageBox.Show("执行不成功");
            }
            Clipboard.Clear();


提交的关键代码


webBrowser1.Document.All["ctl00$CPH_Content$tb_LoginNameOrLoginEmail"].InnerText = textBox1.Text;
            webBrowser1.Document.All["ctl00_CPH_Content_tb_Password"].InnerText = textBox2.Text;
            webBrowser1.Document.All["ctl00$CPH_Content$tb_ExPwd"].InnerText = textBox3.Text;
            
            webBrowser1.Document.All["ctl00$CPH_Content$Image_Login"].InvokeMember("click");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值