![]() |
如果你想在Windows Forms中实现URL Encoding,HttpUtility类有一个shared (static)方法实现对字符串的URL 编码。下面就是一个例子:【注意要在工程的引用里添加引用System.Web】
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Web
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows 窗体设计器生成的代码 "
Public Sub New()
MyBase.New()
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
'窗体重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents TextBox3 As System.Windows.Forms.TextBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Button1 = New System.Windows.Forms.Button
Me.TextBox2 = New System.Windows.Forms.TextBox
Me.Label1 = New System.Windows.Forms.Label
Me.Button2 = New System.Windows.Forms.Button
Me.TextBox3 = New System.Windows.Forms.TextBox
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(72, 16)
Me.TextBox1.Size = New System.Drawing.Size(320, 21)
Me.TextBox1.Text = "http://xml.sz.luohuedu.net/?ID=Url Encoding 测试"
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(112, 112)
Me.Button1.Size = New System.Drawing.Size(96, 23)
Me.Button1.Text = " URL Encoding"
'
'TextBox2
'
Me.TextBox2.Location = New System.Drawing.Point(72, 48)
Me.TextBox2.Size = New System.Drawing.Size(320, 21)
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(0, 24)
Me.Label1.Size = New System.Drawing.Size(64, 16)
Me.Label1.Text = "输入URL:"
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(240, 112)
Me.Button2.Size = New System.Drawing.Size(88, 23)
Me.Button2.Text = "URL Decoding"
'
'TextBox3
'
Me.TextBox3.Location = New System.Drawing.Point(72, 80)
Me.TextBox3.Size = New System.Drawing.Size(320, 21)
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(416, 149)
Me.Controls.Add(Me.TextBox3)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.TextBox1)
Me.Text = "URL Encoding/Decoding 测试"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox2.Text = HttpUtility.UrlEncode(TextBox1.Text)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox3.Text = HttpUtility.UrlDecode(TextBox2.Text)
End Sub
End Class
注意:如果发送URL到页面,会出现不能正确解析的情况,有时候会出现汉字为奇数个时会少一个汉字,为偶数个时则正常,这种情况是使用了System.Web.HttpUtility.UrlEncode(strArg, System.Text.Encoding.UTF8)造成的,用System.Web.HttpUtility.UrlEncode(strArg, System.Text.UnicodeEncoding.GetEncoding("GB2312"))即可正确传递。
要实现实现与百度相同的结果,则需要
System.Web.HttpUtility.UrlEncode(strArg, System.Text.UnicodeEncoding.GetEncoding("GB2312")).ToUpper()
就可以了
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Web;
namespace WindowsApplication1
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Button button2;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(72, 40);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(528, 21);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "我是中文";
//
// button1
//
this.button1.Location = new System.Drawing.Point(168, 168);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "Url编码";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(72, 72);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(528, 21);
this.textBox2.TabIndex = 2;
this.textBox2.Text = "";
//
// textBox3
//
this.textBox3.Location = new System.Drawing.Point(72, 112);
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(528, 21);
this.textBox3.TabIndex = 3;
this.textBox3.Text = "";
//
// button2
//
this.button2.Location = new System.Drawing.Point(392, 168);
this.button2.Name = "button2";
this.button2.TabIndex = 4;
this.button2.Text = "Url解码";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(672, 273);
this.Controls.Add(this.button2);
this.Controls.Add(this.textBox3);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
textBox2.Text = System.Web.HttpUtility.UrlEncode(textBox1.Text);
}
private void button2_Click(object sender, System.EventArgs e)
{
textBox3.Text = System.Web.HttpUtility.UrlDecode(textBox2.Text);
}
}
}