在c#中,我可以按Encoding.UTF8.GetString()
对二进制数据进行编码,然后进行转换
它由binary = Encoding.UTF8.GetBytes()
返回。
我希望结果在任何情况下都应该是我原来的二进制数据 - 没有例外。
但无论如何这是真的吗?
或者它取决于UTF8
字符集的具体行为?
或者我应该更好地使用Encoding.ASCII.GetString()
和Encoding.ASCII.GetBytes()
?
如果有人知道Encoding
究竟做了什么(它如何处理特殊字符或特殊字节)那么请给我建议。
答案 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)将其恢复为字符串;