logo

如何在Windows Form中实现URL Encoding/Decoding?
作者:孟宪会 发表于:2003-07-24 17:32:07

如果你想在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

C#代码

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); } } }

注意:如果发送URL到页面,会出现不能正确解析的情况,有时候会出现汉字为奇数个时会少一个汉字,为偶数个时则正常,这种情况是使用了System.Web.HttpUtility.UrlEncode(strArg, System.Text.Encoding.UTF8)造成的,用System.Web.HttpUtility.UrlEncode(strArg, System.Text.UnicodeEncoding.GetEncoding("GB2312"))即可正确传递。