asp.net C# Encoder and Decoder 网络数据编码与解码

作者:袖梨 2022-06-25

asp.net在网络通信中,很多情况下通信双方传达的都是字符信息。但是,字符信息并不能直接从网络的一端传递到另一端,这些字符信息首先需要被转换成一个字节序列后才能在网络中传输。将字符序列转换为字节序列的过程称为编码。当这些字节传送到网络的接收方时,接收方需要反过来将字节序列再转换为字符序列,这种过程称为解码。

下面是编码与解码的例子:

截图:

proame.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

代码如下 复制代码
namespace EncoderDecoderExample
{
static class Program
{
///
/// 应用程序的主入口点。
///

[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

form1.cs

代码如下 复制代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace EncoderDecoderExample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
txt_EncodeStart.Text = "这是一条测试数据:abc,123ABC..。。n test string";
}

private void Form1_Load(object sender, EventArgs e)
{
//显示现有的编码类型
foreach (EncodingInfo ei in Encoding.GetEncodings())
{
Encoding en = ei.GetEncoding();
cbo_EncodeType.Items.Add(string.Format("{0}[{1}]", en.HeaderName, en.EncodingName));
}
cbo_EncodeType.SelectedIndex = cbo_EncodeType.FindString("gb2312");
}

private void btn_EncodeAndDecode_Click(object sender, EventArgs e)
{
//编码
string codeType = this.cbo_EncodeType.SelectedItem.ToString();
codeType = codeType.Substring(0, codeType.IndexOf('[')); //获得编码类型 gb2312
Encoder encoder = Encoding.GetEncoding(codeType).GetEncoder(); //获得一个 gb2312 编码类型的编码器
char[] chars = this.txt_EncodeStart.Text.ToCharArray(); //将字符串转换为一组char数组
byte[] bytes = new byte[encoder.GetByteCount(chars, 0, chars.Length, true)]; //声明一个长度为‘编码为byte后产生的字节数’
encoder.GetBytes(chars, 0, chars.Length, bytes, 0, true); //进行编码,将chars数组中的字符编码到byte数组中
txt_EncodeOver.Text = Convert.ToBase64String(bytes); //将 8 位无符号整数数组的值转换为其用 Base64 数字编码的等效字符串 显示到控件中。

//解码
Decoder decoder = Encoding.GetEncoding(codeType).GetDecoder(); //获得编码类型为 gb2312 的解码器
int charLen = decoder.GetChars(bytes, 0, bytes.Length, chars, 0); //进行解码,将byte数组中的8位无符号整数转换为 char字符
String strResult = "";
foreach (char c in chars)
strResult += c.ToString();
txt_DecodeOver.Text = strResult;

}


}
}

form1.desgi.cs

代码如下 复制代码

namespace EncoderDecoderExample
{
partial class Form1
{
///


/// 必需的设计器变量。
///

private System.ComponentModel.IContainer components = null;

///


/// 清理所有正在使用的资源。
///

/// 如果应释放托管资源,为 true;否则为 false。
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows 窗体设计器生成的代码

///


/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
///

private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.cbo_EncodeType = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.txt_EncodeStart = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.txt_EncodeOver = new System.Windows.Forms.TextBox();
this.txt_DecodeOver = new System.Windows.Forms.TextBox();
this.btn_EncodeAndDecode = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(14, 26);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(65, 12);
this.label1.TabIndex = 0;
this.label1.Text = "编码类型:";
//
// cbo_EncodeType
//
this.cbo_EncodeType.FormattingEnabled = true;
this.cbo_EncodeType.Location = new System.Drawing.Point(85, 23);
this.cbo_EncodeType.Name = "cbo_EncodeType";
this.cbo_EncodeType.Size = new System.Drawing.Size(216, 20);
this.cbo_EncodeType.TabIndex = 1;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(26, 65);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(53, 12);
this.label2.TabIndex = 2;
this.label2.Text = "编码前:";
//
// txt_EncodeStart
//
this.txt_EncodeStart.Location = new System.Drawing.Point(85, 62);
this.txt_EncodeStart.Multiline = true;
this.txt_EncodeStart.Name = "txt_EncodeStart";
this.txt_EncodeStart.Size = new System.Drawing.Size(216, 53);
this.txt_EncodeStart.TabIndex = 3;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(26, 135);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(53, 12);
this.label3.TabIndex = 4;
this.label3.Text = "编码后:";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(26, 204);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(53, 12);
this.label4.TabIndex = 5;
this.label4.Text = "解码后:";
//
// txt_EncodeOver
//
this.txt_EncodeOver.Location = new System.Drawing.Point(85, 132);
this.txt_EncodeOver.Multiline = true;
this.txt_EncodeOver.Name = "txt_EncodeOver";
this.txt_EncodeOver.Size = new System.Drawing.Size(216, 53);
this.txt_EncodeOver.TabIndex = 6;
//
// txt_DecodeOver
//
this.txt_DecodeOver.Location = new System.Drawing.Point(85, 204);
this.txt_DecodeOver.Multiline = true;
this.txt_DecodeOver.Name = "txt_DecodeOver";
this.txt_DecodeOver.Size = new System.Drawing.Size(216, 53);
this.txt_DecodeOver.TabIndex = 7;
//
// btn_EncodeAndDecode
//
this.btn_EncodeAndDecode.Location = new System.Drawing.Point(125, 268);
this.btn_EncodeAndDecode.Name = "btn_EncodeAndDecode";
this.btn_EncodeAndDecode.Size = new System.Drawing.Size(75, 23);
this.btn_EncodeAndDecode.TabIndex = 8;
this.btn_EncodeAndDecode.Text = "编码/解码";
this.btn_EncodeAndDecode.UseVisualStyleBackColor = true;
this.btn_EncodeAndDecode.Click += new System.EventHandler(this.btn_EncodeAndDecode_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(329, 303);
this.Controls.Add(this.btn_EncodeAndDecode);
this.Controls.Add(this.txt_DecodeOver);
this.Controls.Add(this.txt_EncodeOver);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.txt_EncodeStart);
this.Controls.Add(this.label2);
this.Controls.Add(this.cbo_EncodeType);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "编码/解码";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();

}

#endregion

private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox cbo_EncodeType;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox txt_EncodeStart;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox txt_EncodeOver;
private System.Windows.Forms.TextBox txt_DecodeOver;
private System.Windows.Forms.Button btn_EncodeAndDecode;
}
}

源码下载地址:https://www.111cn.net/down/EncoderDecoderExample.rar

相关文章

精彩推荐