3

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

我希望在任何情况下结果都应该是我的原始二进制数据——也不例外。

但在任何情况下都是真的吗?

还是取决于UTF8字符集的具体行为?

还是我应该更好地使用Encoding.ASCII.GetString()and Encoding.ASCII.GetBytes()

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

4

2 回答 2

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);
于 2013-09-26T10:22:18.230 回答
1

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

因此,如果您使用 Encoding.UTF8.GetBytes("Hello world!"); 您可以使用 Encoding.UTF8.GetString(byteArray); 将其恢复为字符串。

于 2013-09-26T10:23:23.157 回答