个人随笔
技术改变世界

C# 网络数据编码与解码(Encoder and Decoder)

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

下面是编码与解码的例子:
Encoder
完整代码:

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

以上为完整代码,若不能正确编译,可直接下载打包文件进行编译:EncoderDecoderExample

转载请注明出处王旭博客 » C# 网络数据编码与解码(Encoder and Decoder)

分享到:更多 ()

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    Our ‘culture’, ’society’ or whatever you want to call it is generally a pampered, self indulgent and materialistic one where the cult of the individual is paramount.This contrasts with many other societies whose values tend to be more communal.These “communal” cultures tend to express indignation in different ways. For example, they burned heretics and exiled and ostracised non-conformists.It would seem to me that “communal” cultures aren’t in any way less indignant than &#i2i0;2ndividual8st” cultures. They merely express their indignation in different ways, often with murderous violence.

    Elida1个月前 (05-16)回复