详解Encoding,网络数据编码与解码

首先贴几个MSDN上的方法:

        //编码的一些方法
        //1、获取Encoder的实例:
        Encoder code1 = Encoding.ASCII.GetEncoder();// ASCII的编码实例
        Encoder code2 = Encoding.Unicode.GetEncoder();// Unicode
        //2、一些方法:
        public virtual int GetBytes(
                  char[] chars,     //要编码的字符数组
                  charIndex,//第一个要编码的字符索引,一般从0开始
                  int charCount,//字符数目,字符数组的长度
                  byte[] bytes,//存储编码后的字节序列,这里一般是字节数组
                  int byteIndex,//开始写入所产生的的字节数组的索引位置
                  bool flush        //如果为false,则编码器会将数据末尾的尾部字节存储在内部缓冲区内,为下次编码操作使用这个字节做准备。     
                  )
                  public abstract int GetByteCount(
                  char[] chars,//要编码的字符数组
                  int Index,//第一个要编码的字符索引,一般从0开始
                  int count,//字符数目,字符数组的长度
                  bool flush//如果为false,则编码器会将数据末尾的尾部字节存储在内部缓冲区内,为下次编码操作使用这个字节做准备。
              )
            public abstract int GetChars(
                byte[] bytes,//要解码的字节数组
                int byteIndex,//需要开始解码的自己数组位置索引
                int Bytecount,//字节数组长度
                char[] chars,//存储字符的数组
                int charIndex//开始写入字符的位置索引
                )
             public virtual int GetCharCount(
                 byte[] bytes, 包含要解码的字节序列的字节数组。
                 int index, 第一个要解码的字节的索引。
                 int count,要解码的字节数。
                 bool flush)若要在计算后模拟清除解码器的内部状态,则为 true;否则为 false。

 

后面举一个简单的例子来说明这些方法:

        static void Main(string[] args)
        {
            string text = "UIDFsdiwdf太阳";
            Console.WriteLine("原字符串是:{0}", text);
            Console.WriteLine("开始进行编码。");

            //编码
            Encoding coding = Encoding.UTF8;
            char[] chartext = text.ToCharArray();
            //计算编码后的字节数组长度
            //这里第四个参数是原字符串的长度
            int lengthbyte = coding.GetEncoder().GetByteCount(chartext, 0, chartext.Length, false);
            byte[] result = new byte[lengthbyte];
            coding.GetEncoder().GetBytes(chartext, 0, chartext.Length, result, 0, false);
            Console.WriteLine("编码后的字节是:");
            //输出编码后的字节
            foreach (byte b in result)
            {
                Console.Write("{0}-", b);
            }

            //解码
            Console.WriteLine("开始进行解码。");
            int lengthstr = coding.GetDecoder().GetCharCount(result, 0, result.Length, false);
            char[] charstr = new char[lengthstr];
            coding.GetDecoder().GetChars(result, 0, result.Length, charstr, 0);
            Console.WriteLine("解码后的字符串是:");
            foreach (char c in charstr)
            {
                Console.Write(c);
            }
            Console.ReadLine();
        }

 

输出结果:

详解Encoding,网络数据编码与解码_第1张图片

你可能感兴趣的:(详解Encoding,网络数据编码与解码)