在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)将其恢复为字符串;