.net 转换字节数组->;字符串->;字节数组损坏数据

.net 转换字节数组->;字符串->;字节数组损坏数据,.net,string,encoding,bytearray,.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[

有人能告诉我这里发生了什么事吗

        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}

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


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

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

这是一张图表供参考


我不太清楚为什么不能识别plusminus符号,但这就是字节数组不相等的原因。除了交换,它们将是相等的,并且数据不会以任何方式损坏。

您确定它们仍然不是相同的字符串吗?保存原始字节不需要编码……它们可能是相同的字符串,但我使用的是SQL时间戳,所以我关心的是字节,而不是字符串……这个表是什么意思?它似乎是一个由U+0080到U+017F的unicode字符组成的表,以及它们在UTF-8中的编码方式和含义。例如,U+00F8被称为带笔划的拉丁文小写字母O,在UTF-8中被编码为(195184),它看起来是这样的:ø好问题,它让我思考和阅读它。这是一个有趣的问题!