4

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

        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}

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

4

2 回答 2

5

在您的原始字节数组中,您有177字符,即加减号。但是,在序列化过程中,无法识别该代码。它被替换239 191 189为替换字符。

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

我不太确定为什么无法识别加号,但这就是字节数组不相等的原因。除了该交换之外,它们将是相等的,并且数据不会以任何方式损坏。

于 2013-07-24T14:58:37.853 回答
4

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

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

于 2013-07-24T14:56:08.670 回答