在c#中编码和解码是否安全?

在c#中,我可以通过Encoding.UTF8.GetString()编码二进制数据,然后通过binary = Encoding.UTF8.GetBytes()将其转换回来。

我希望结果在任何情况下都应该是我原来的二进制数据 – 没有例外。

但无论如何这是真的吗?

或者它取决于UTF8字符集的特定行为?

或者我应该更好地使用Encoding.ASCII.GetString()Encoding.ASCII.GetBytes()

如果有人知道Encoding究竟做了什么(它如何处理特殊字符或特殊字节)那么请给我建议。

在c#中,我可以通过Encoding.UTF8.GetString()编码二进制数据,然后通过binary = Encoding.UTF8.GetBytes()将其转换回来。

不,因为这不是文本编码所做的

文本编码将任意文本转换为结构化字节/从结构化字节转换(意味着:以该编码定义的方式构造)

你有任意字节,而不是结构化字节。 您应该使用base-64( Convert.ToBase64String / Convert.FromBase64String ),它将任意字节转换为结构化字符串/从结构化字符串转换 – 在这种情况下,根据base-64的规则进行结构化。

 byte[] orig = ... string storeThis = Convert.ToBase64String(orig); // ... byte[] backAgain = Convert.FromBase64String(storeThis); 

当您希望字节采用UTF8编码时,您应该只使用Encoding.UTF8。 在未知字节上使用GetString()可能会导致意外结果。

所以如果你使用Encoding.UTF8.GetBytes(“Hello world!”); 您可以使用Encoding.UTF8.GetString(byteArray)将其恢复为字符串;