个人随笔
技术改变世界

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)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址