vb.net 教程 12-8 WebRequest 和 Webresponse 3-3 GET方式向网页发送数据 中文的处理

在《vb.net 教程 12-8 WebRequest 和 Webresponse 3-2 GET方式向网页发送数据》学习了将变量/值发送到网页接收,当时举的例子是:
Dim poststring As String = "txtname1=test1&txtname2=test2"
那么,如果使用中文会怎样呢?将以上代码更换为:
Dim poststring As String = "txtname1=Form测试1&txtname2=Form测试2"
返回的结果:
vb.net 教程 12-8 WebRequest 和 Webresponse 3-3 GET方式向网页发送数据 中文的处理_第1张图片
可以看到,返回的是乱码。。。。
这个问题是vb.net在发送字符串的时候使用的编码和网页编码不一致造成的,使用如下utf-8对服务器传回来的数据编码,
 strpagecontent &= Encoding.GetEncoding("gb2312").GetString(mybyte, 0, intreadl)
得到如下结果:
vb.net 教程 12-8 WebRequest 和 Webresponse 3-3 GET方式向网页发送数据 中文的处理_第2张图片

可以看到,传给服务器的数据显示正确了,但是,本身的数据(如“返回”二字)却乱码了。
为了解决这个问题,可以将传给服务器的变量/值编码发送给服务器。
vb.net提供了HttpUtility 类,用于在处理 Web 请求时编码和解码 URL 的方法。该类使用HttpUtility.UrlEncode 方法对URL 字符串进行编码,其中重载方法:
Public Shared Function UrlEncode ( str As String, e As Encoding ) As String
可以使用指定的编码对象对 URL 字符串进行编码。
请在使用HttpUtility类之前先在项目中引用system.web,并在所有代码之前加上Imports system.web。
修改后的代码如下:

    Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
        Dim poststring As String = HttpUtility.UrlEncode("txtname1", Encoding.GetEncoding("gb2312")) &
                "=" & HttpUtility.UrlEncode("Form测试1", Encoding.GetEncoding("gb2312")) &
                "&" & HttpUtility.UrlEncode("txtname2", Encoding.GetEncoding("gb2312")) &
                "=" & HttpUtility.UrlEncode("Form测试2", Encoding.GetEncoding("gb2312"))

        Dim addr As String = txtform.Text
        addr &= "?" & poststring
        Try
            Dim myWebRequest As WebRequest = WebRequest.Create(addr)
            myWebRequest.ContentType = "application/x-www-form-urlencoded"
            myWebRequest.Method = "GET"
            Dim myWebresponse As WebResponse = myWebRequest.GetResponse

            Dim mystream As Stream = myWebresponse.GetResponseStream

            Dim singleReadCount As Integer = 10240
            Dim mybyte(singleReadCount - 1) As Byte
            Dim strpagecontent As String = ""

            Dim intreadl As Integer = 0
            Do
                intreadl = mystream.Read(mybyte, 0, singleReadCount)
                strpagecontent &= Encoding.GetEncoding("gb2312").GetString(mybyte, 0, intreadl) 'Encoding.GetEncoding("gb2312").GetString(mybyte, 0, intreadl)
            Loop While intreadl > 0

            Console.WriteLine(strpagecontent)
            mystream.Close()
            myWebresponse.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

注意,代码中使用了与网页一样的编码 gb2312:
HttpUtility.UrlEncode("Form测试1", Encoding.GetEncoding("gb2312"))
返回结果:
vb.net 教程 12-8 WebRequest 和 Webresponse 3-3 GET方式向网页发送数据 中文的处理_第3张图片

 

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看vb.net 教程 目录

你可能感兴趣的:(vb.net,教程)