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

时间:2013-09-26 10:15:10

标签: c# encoding utf-8 binary data-conversion

在c#中,我可以按Encoding.UTF8.GetString()对二进制数据进行编码,然后进行转换 它由binary = Encoding.UTF8.GetBytes()返回。

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

但无论如何这是真的吗?

或者它取决于UTF8字符集的具体行为?

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

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

2 个答案:

答案 0 :(得分:5)

  

在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);

答案 1 :(得分:1)

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

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