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

时间:2013-10-18 13:32:52

标签: c# character-encoding ascii

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

试试这个:

     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());

对我而言,结果并不像我期望的那样,但是...... 63。

为什么会这样?

3 个答案:

答案 0 :(得分:5)

  

为什么会这样?

因为ASCII只包含最多127个值。

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

目前还不清楚你正在努力实现的目标,但是:

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

答案 1 :(得分:3)

ASCII编码是一种7位编码。如果你看一下生成的字符串,它包含“?” - 无法识别的角色。您可以选择Encoding.Default。

答案 2 :(得分:1)

ASCII是七位字符编码,因此172超出该范围,因此在转换为字符串时,它会转换为“?”用于无法表示的字符。