String s1= System.Text.Encoding.UTF8.GetString(new byte[] {21,21,199,94,233,144,217,27 });
//s1="^"
byte[] bytes=System.Text.Encoding.UTF8.GetBytes(s1);
//bytes={21,21,94,27};
String S2=System.Text.Encoding.UTF8.GetString(bytes);
//S2="^"将一个字节数组转换为字符串,同时将转换过来的字符串转换回字节数组时怎么出现为不同的byte[],
而将此byte[]转换为字符串,还是原来那字符串(即S2=S1,而new byte[]!=bytes,怎样才能得到将字符串转换为原来的字节数组。

解决方案 »

  1.   

    无法获取到原来的了..  String s1= System.Text.Encoding.UTF8.GetString(new byte[] {21,21,199,94,233,144,217,27 }); 这行的数据就不正确了你可以考虑Base64
     Convert.ToBase64String();
                Convert.FromBase64String();
      

  2.   

    1楼对,用Convert.ToBase64String(); 这个应该可以的
      

  3.   

    byte[] bytesOld = new byte[] { 21, 21, 199, 94, 233, 144, 217, 27 };
                string aaa = bytesOld.ToString();
                
                String s1 = System.Text.Encoding.ASCII.GetString(bytesOld);
                byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s1);
                String S2 = System.Text.Encoding.UTF8.GetString(bytes);改成ASCII byte[]内容一样
      

  4.   

    String s1= System.Text.Encoding.UTF8.GetString(new byte[] {21,21,199,94,233,144,217,27 }); 
    你给的byte根本不能被正确编码,编码时候被省略了。所以你再编码回去就不对;
    你用一个正确的字符串数组才行;
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes("abcd"); 
      

  5.   


    你的第一个字节数组在转换为字符串的时候,因为,不是合法的Utf-8,所以基本都被过滤了,只剩下,合法的字符串,所以,你再转回去的时候,就少了那些不合法的字节,所以才会不一样,
    如果你想不被过滤的话,要么考虑用扩展的ASCII码来转换成字符串,就OK了,或者用其它的算法,如 Base64[code=MSIL]UTF-8编码规则是这样的如果一个字符串是三个字节的编码,那这个字符就应该是以下的BIT位 表示法
    就是这样:0XXXXXXX 10XXXXXX 110XXXXX如果是双字节的编码则是0XXXXXXX 10XXXXXX当如果出现这样
    0XXXXXXX 110XXXXX
    或是
    0XXXXXXX 10XXXXXX 11110XXX
    或是
    0XXXXXXX 110XXXXX 10XXXXXX
    这样他都是不合法的字符串在UTF-8中都是以 0XXXXXXX 这样的字节做为一个字符的开始[/code]
      

  6.   

    我在做简体的C/S软件时,也有过这样的问题,
    建议,不要指定编码.写Encoding.Default.默认方式吧
      

  7.   


    现在发现,每次发贴,都会出现点错误,上面的贴有错误,我自己更正一下UTF-8编码规则是这样的如果一个字符串是三个字节的编码,那这个字符就应该是以下的BIT位 表示法
    就是这样:1110XXXX 10XXXXXX 10XXXXXX如果是双字节的编码则是110XXXXX 10XXXXXX单字节字符就是这样的
    0XXXXXXX当如果出现这样
    110XXXXX 0XXXXXXX
    或是
    0XXXXXXX 10XXXXXX
    或是
    110XXXXX 110XXXXX
    这样他都是不合法的字符串字符的起始字符是
    1110XXXX  表示这个字符是由三个字节组成,这是第一个字节
    111110XX  表示这个字符是由五个字节组成,这是第一个字节
    0XXXXXXX  表示这个字符是由1个字节组成10XXXXXX  表示这个字节只是一个字符的组成字节,他不能做为字符的第一个字节