httpwebresponse-[vb.net]HttpWebResponse的编码问题——GB2312乱码

问题描述

[vb.net]HttpWebResponse的编码问题——GB2312乱码

我想用这段代码登录获取cookie,然后再访问用户页面,这一部分工作正常。可是如果遇到GB2312编码的网页就会出现乱码。请高手指点,万分感谢!
另:选这个网址仅供说明只用,没有别的意思。

Imports System.Net
Imports System.IO
Imports System.Text

Public Class Form1
    Const ConnectURL = "http://www.guqu.net/User/User_ChkLogin.asp"
    Const HomeURL = "http://www.guqu.net/"

    Private Function RegularPage(ByVal URL As String, ByVal CookieJar As CookieContainer) As String
        Dim reader As StreamReader
        Dim Request As HttpWebRequest = HttpWebRequest.Create(URL)
        Request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14"
        Request.AllowAutoRedirect = False
        Request.CookieContainer = CookieJar
        Dim Response As HttpWebResponse = Request.GetResponse()
        reader = New StreamReader(Response.GetResponseStream())
        Return reader.ReadToEnd()
        Response.Close()
    End Function

    Private Sub LogonPage(ByVal URL As String, ByRef CookieJar As CookieContainer, ByVal PostData As String)
        Dim reader As StreamReader
        Dim Request As HttpWebRequest = HttpWebRequest.Create(URL)
        Request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14"
        Request.CookieContainer = CookieJar
        Request.AllowAutoRedirect = False
        Request.ContentType = "application/x-www-form-urlencoded"
        Request.Method = "POST"
        Request.ContentLength = PostData.Length
        Dim requestStream As Stream = Request.GetRequestStream()
        Dim postBytes As Byte() = Encoding.ASCII.GetBytes(PostData)
        requestStream.Write(postBytes, 0, postBytes.Length)
        requestStream.Close()
        Dim Response As HttpWebResponse = Request.GetResponse()
        For Each tempCookie In Response.Cookies
            CookieJar.Add(tempCookie)
        Next
        reader = New StreamReader(Response.GetResponseStream())
        Response.Close()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim CookieJar As New CookieContainer
        Dim PostData As String
        Try
            'Logon
            PostData = "UserName=abc&UserPassword=abcdef&CheckCode=173872&ComeUrl=http%3A%2F%2Fwww.guqu.net%2F&Login.x=30&Login.y=13&Login=+%B5%C7+%C2%BC+"
            LogonPage(ConnectURL, CookieJar, PostData)
            'Homepage
            Dim Sw As StreamWriter = File.CreateText("E:response.html")
            Sw.Write(RegularPage(HomeURL, CookieJar))
            Sw.Close()
            RichTextBox1.AppendText(RegularPage(HomeURL, CookieJar))
        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try
    End Sub

End Class

解决方案

发现问题了:

 reader = New StreamReader(Response.GetResponseStream())

改为

 reader = New StreamReader(Response.GetResponseStream(), Encoding.GetEncoding("GB2312"))

然后下面输出文件改成Unicode编码就行了

解决方案二:

System.Web.HttpUtility.UrlEncode对中文编码

解决方案三:

注意只是对值编码,不要对整个post编码

时间: 2024-08-04 12:02:45

httpwebresponse-[vb.net]HttpWebResponse的编码问题——GB2312乱码的相关文章

VB.NET/ASP.NET编码规范(ZT)

asp.net|编码|规范 在开发中保持良好的编码规范是十分重要的.我所采用的新的VB.NET/ASP.NET编码规范,是一种被证明能明显改善代码可读性,并有助于代码管理.分类的编码规范.采用这种编码规范,能避免如匈牙利命名法带来的繁长前缀,便于记忆变量的用途.下面的介绍这种编码规范. 一.类型级单位的命名 1.类 □以Class声明的类,都必须以名词或名词短语命名,体现类的作用.如: Class Indicator□当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异

网站整体编码转换为gb2312,之前为utf8

问题描述 网站整体编码转换为gb2312,之前为utf8 基于thinkphp开发的网站,现在要把网站的整体编码格式改为gb2312,默认为utf8.急求大神指点 解决方案 http://www.51zxw.net/study.asp?vip=12576487 解决方案二: 那估计还是有点麻烦,,代码都得改

解决编码为gb2312页面ajax交互汉字乱码问题

解决编码为gb2312页面ajax交互汉字乱码问题 ajax只支持utf-8格式,不能支持gb2312编码格式,所以经常遇到gb2312的编码的程序使用ajax就出现乱码,刚找到一种解决方案是: 服务器端传送的数据仍是gb2312编码,客户端用js将汉字转变成utf8编码显示在页面 search.php教程 <?php header("content-type: text/html; charset=gb2312"); include './search.htm'; ?>

asp中读取xml以及Utf-8和Gb2312乱码问题

xml|问题 asp中创建xml对象通常使用:CreateObject("Microsoft.XMLDOM")读取节点:selectSingleNode("nodename")//nodename为节点名.读取属性:attributes.getNamedItem("attribute")//attribute为节点中所具有的属性名.加载xml: load(Server.MapPath("data.xml")) async 属性

字符编码详解——彻底理解掌握编码知识,“乱码”不复存在

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://polaris.blog.51cto.com/1146394/377468  每一个程序员都不可避免的遇到字符编码的问题,特别是做Web开发的程序员,"乱码问题"一直是让人头疼的问题,也许您已经很少遇到"乱码"问题,然而,对解决乱码的方法的内在原理,您是否明白?本人作为一个程序员,在字符编码方面同样遇到不少问题,而且一直对各种编码懵懵懂懂.不清不楚:

采集-Java HTTP Client 抓取网页,这个网页无论用什么编码都是乱码?

问题描述 Java HTTP Client 抓取网页,这个网页无论用什么编码都是乱码? http://www.licai.com/xuetang/CiDian.aspx?dj=1&type=&page=1 client.executeMethod(get); // String statusText = get.getStatusText(); //System.out.println("Test.main():--->" + statusText); Syste

默认apache编码导致DEDECMS乱码及其他乱码总结

朋友的dedecms乱码,文件的编码以及head里面的meta的编码都是正确的,把生成的HTML下载到本地打开,也都是正常的,一放到服务器就乱码. 经过更为细致的检查,发现他在根目录下的.htaccess里面配置了AddDefaultCharset UTF-8,这样就会导致apache默认使用utf-8编码向浏览器发送数据,客户的dedecms是GBK编码,所以自然就乱码了,所以然还有人在.htaccess里面配置这个...下面在网上找到的资料: 首先,可以使用AddDefaultCharset

用c/c++处理编码转换防止乱码产生

问题描述 用c/c++处理编码转换防止乱码产生 最近在做一个从ftp上获取文件信息的项目,想问一下从ftp取得信息后如何进行编码转换才能防止乱码的产生,在windos环境下,用c++解决 解决方案 都统一用UTF8等来进行编码,各种其他编码进行转换等 解决方案二: 不都是采用中文的格式吗

安卓 webservice-接口压缩解压编码解码变成乱码

问题描述 接口压缩解压编码解码变成乱码 public class SSSS extends HttpServlet { //str="杀神" public String zip_Base642(String str) { if (str == null) return null; byte[] compressed; ByteArrayOutputStream out = null; ZipOutputStream zout = null; String compressedStr =