byte[] b1={120,218,179,97,136,100,240,96,136,103,240,101,112,102,176,99,80,97,249,206};
string str1 = (new UnicodeEncoding()).GetString(b1);
byte[] b2 = (new UnicodeEncoding()).GetBytes(str1);
执行之后b2的值为:
          {179,97,136,100,240,96,136,103,240,101,112,102,176,99,80,97,249,206}
为什么b1和b2不等呢?

解决方案 »

  1.   

    to kkbspod:
    我这不一样!首先数组长度就不一样!不知为何!
      

  2.   

    to cancerser:
    没看错,不信你可以试试!
    转换之后,就少了两个!
      

  3.   

    我这的确不少
    你换成
    byte[] b1={120,218,179,97,136,100,240,96,136,103,240,101,112,102,176,99,80,97,249,206};
    string str1 = System.Text.Encoding.Unicode.GetString(b1);
    byte[] b2 = System.Text.Encoding.Unicode.GetBytes(str1);试试还少不?
      

  4.   

    可以这样试试!
                 byte[] b1 = { 120, 218, 179, 97, 136, 100, 240, 96, 136, 103, 240, 101, 112, 102, 176, 99, 80, 97, 249, 206 };
                 string str1 = (new UnicodeEncoding()).GetString(b1);
                 byte[] b2 = (new UnicodeEncoding()).GetBytes(str1);
                 if (b1.Length == b2.Length)
                     MessageBox.Show("一样");
                 else
                     MessageBox.Show("不一样");
      

  5.   

    谁告诉你byte数组可以转为字符串不丢失信息的?
      

  6.   

    to viena:
    有解决办法吗?
      

  7.   

    viena(维也纳nn) ( ) 说的很对,的确会丢但楼长的写法不应该会丢
    楼长写的是Unicode编码 b1的所有编码都能表示的
      

  8.   

    b1.Length=20,b2.Length=20,元素一样。
    但是b1==b2=false
    这个是我这里的结果
      

  9.   

    to 
    b1.Length=20,b2.Length=20,元素一样。
    但是b1==b2=false
    这个是我这里的结果
    ______
    是不能这样比较的b1 和 b2 已经不是基础类型 而是引用类型
    你这样比较的是引用 而不是内容
      

  10.   

    b1 is a Array
    b2 is a Array 
    b1 == b2 ====>false;
    数组能这么比较么?
      

  11.   

    楼上的正解...用Unicode不能全部转换. 
    用DBCSCodePageEncoding就可以了转化了...
                byte[] b1 ={ 120, 218, 179, 97, 136, 100, 240, 96, 136, 103, 240, 101, 112, 102, 176, 99, 80, 97, 249, 206 };
                string str1 = Encoding.Default.GetString(b1);
                byte[] b2 = Encoding.Default.GetBytes(str1);
      

  12.   

    byte[] b1={120,218,179,97,136,100,240,96,136,103,240,101,112,102,176,99,80,97,249,206};
    char[] c1=new char[b1.Length];
    for(int i=0;i<b1.Length;i++)
    c1[i]=(char)b1[i];
    string str1=new string(c1);
    char[] c2=str1.ToCharArray();
    byte[] b2=new byte[c2.Length];
    for(int i=0;i<c2.Length;i++)
    b2[i]=(byte)c2[i];
    //手动写的 再少就是程序有问题了
      

  13.   

    还是不行啊!我把全部代码贴出来,大家看看有没有什么不对的地方!压缩字符串的方法:
            public static byte[] CompressText(string strSource)  //压缩
            {
                MemoryStream mMemory = new MemoryStream();
                byte[] byteSource = (new UnicodeEncoding()).GetBytes(strSource);
                Deflater mDeflater =  new Deflater(ICSharpCode.SharpZipLib.Zip.Compression.Deflater.BEST_COMPRESSION);
                ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream mStream = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream(mMemory, mDeflater, 131072);
                mStream.Write(byteSource, 0, byteSource.Length);
                mStream.Close();
                byte[] byteDest = mMemory.ToArray();
                return byteDest;
            }         private void button3_Click(object sender, EventArgs e)
            {            string str = "中华人民共和国";
                byte[] b1 = CompressText(str);
                string str1 = System.Text.Encoding.Default.GetString(b1);
                byte[] b2 = System.Text.Encoding.Default.GetBytes(str1);            if (b1.Length == b2.Length)
                    MessageBox.Show("一样");
                else
                    MessageBox.Show("不一样");
            } 我的目的就是把字符串先压缩成byte数组,然后把byte数组转成字符串,再解开,可是在转成字符串的环节上出了问题!
      

  14.   

    不是很清楚你的环境
    就你上面的例子可以使用 System.Text.Encoding.BigEndianUnicode和System.Text.Encoding.Default进行转换
      

  15.   

    楼主首先要保证b1是一个正确的unicode格式,否则强行转换后的结果不能预期
      

  16.   

    byte[] b2 = (new UnicodeEncoding()).GetBytes("你好吗a");
                /*b2[0] = 120;
                b2[1] = 218;*/   //打开这段代码后,同样出现楼主的问题,证明 120,218不是一个正确的unicode格式,导致系统找不到一个符合的字符
                string str1 = (new UnicodeEncoding()).GetString(b2);
                byte[] b1 = (new UnicodeEncoding()).GetBytes(str1);
      

  17.   

    使用 base64 转换吧.byte[] b1={120,218,179,97,136,100,240,96,136,103,240,101,112,102,176,99,80,97,249,206};string s = Convert.ToBase64String(b1);byte[] bytes = Convert.FromBase64String(s);
      

  18.   

    这几天我也正在研究这个问题,楼上所人有说的各种编码我都试过,但都还没解决我的问题。包括Base64String也不行,我后面几天再多查点资料。首先转换过来的长度就有可能不同,虽然可能可能显示一样,但长度会不同。
      

  19.   

    用ASCIIEncoding就不会丢失了不过你先得搞清楚byte中是什么编码