从字节数组转换为字符串时出现奇怪的结果

RRM*_*RRM 1 c# ascii character-encoding

将字节数组转换为字符串然后将字符串转换回字节数组时,我得到奇怪的结果.

试试这个:

     byte[] b = new byte[1];
    b[0] = 172;
    string s = Encoding.ASCII.GetString(b);

    byte[] b2 = Encoding.ASCII.GetBytes(s);
    MessageBox.Show(b2[0].ToString());
Run Code Online (Sandbox Code Playgroud)

对我来说,结果并不像我期望的那样,但是...... 63.

为什么会这样?

Jon*_*eet 5

为什么会这样?

因为ASCII仅包含最多127的值.

当面对对给定编码无效的二进制数据时,Encoding.GetString可以提供替换字符或抛出异常.在这里,它使用的替换字符?.

目前尚不清楚你想要达到的目标,但是:

  • 如果要将任意二进制数据转换为文本,请Convert.ToBase64String改用; 千万不能尝试使用的编码,因为你没有真正代表文本.您可以使用Convert.FromBase64String然后解码.
  • Encoding.ASCII通常是一个糟糕的选择,当然包括172字节的二进制数据不是 ASCII文本
  • 您需要确定您实际使用的编码.我个人不喜欢使用,Encoding.Default除非你真的知道数据是你正在使用的平台的默认编码.如果你做出选择,使用UTF-8是一个很好的选择.