转换字节数组 - > string - >字节数组破坏了数据

时间:2013-07-24 14:51:29

标签: .net string encoding bytearray

谁能告诉我这里发生了什么?

        byte[] stamp = new byte[]{0,0,0,0,0,1,177,115};
        string serialize = System.Text.Encoding.UTF8.GetString(stamp);
        byte[] deserialize = System.Text.Encoding.UTF8.GetBytes(serialize);

        //deserialize == byte[]{0,0,0,0,0,1,239,191,189,115}

为什么是邮票!=反序列化??

2 个答案:

答案 0 :(得分:5)

在原始字节数组中,您有177字符,这是加号。但是在序列化期间,该代码无法被识别。它被239 191 189替换,这是替换字符。

这是一张供参考的图表。 http://www.utf8-chartable.de/unicode-utf8-table.pl?start=65280&utf8=dec

我不太清楚为什么没有识别加号,但这就是字节数组不相等的原因。除了那个交换之外,它们是平等的,数据不会以任何方式被破坏。

答案 1 :(得分:4)

字节数组不编码UTF-8中的有效文本字符串,因此当您“序列化”它时,无法识别的部分将被替换为“替换字符”。如果必须将字节数组转换为字符串,则应找到不具有此类限制的编码,例如ISO-8859-1。

特别是,字节177在有效的UTF-8中不能单独出现:范围128-191中的字节是“连续字节”,只有在看到194-244范围内的字节后才能出现。您可以在此处详细了解UTF-8:https://en.wikipedia.org/wiki/UTF-8