1

任何字节数组都可以转换为字符串吗?还是有一些字节值不可用或无法根据字符串的编码转换为字符?

4

3 回答 3

4

如果字节数组以文本开头,您应该只尝试将它们转换为字符串。如果字节数组实际上是图像文件或视频的内容,或者可能是编码或压缩数据,则不应尝试使用编码将其直接转换为字符串。这样做几乎总是以失败告终:使用 ISO-8859-1可能没问题,但从根本上说这是一个坏主意,你真的不应该这样做。

相反,您应该使用Convert.ToBase64String将其转换为Base64,或者将其转换为十六进制。

如果您确实使用 Base64,您将使用Convert.FromBase64String从文本转换回字节数组。

于 2013-09-06T21:48:04.000 回答
2

任何字节数组都可以转换为字符串吗?

Base64似乎是字节数组的适当表示:

byte[] buffer = ...
string base64 = Convert.ToBase64String(buffer);

在 .NET 中,您可以使用该ToBase64String方法来实现此目的。

此外,您似乎在问题中谈到了字符串的一些编码,但在 .NET 中,所有字符串都是 UTF-16 编码的,所以我不太明白您的意思。

于 2013-09-06T21:48:27.230 回答
0

可以使用各种编码将字符串转换为字节序列。一些编码可以将任何可能的字符串转换为一些字节序列;其他的只能处理包含有限种类字符的字符串,但是对于每个可能的字节序列,都会存在一个可以产生它的字符串。一些编码方法会将任何可能的字符串转换为偶数长度的字节序列,并允许将任何偶数长度的字节序列转换回字符串,但不能产生奇数长度的字符串。我不知道有任何编码方法会在所有可能的字符串和所有可能的任意长度字节序列之间创建一对一的关系。

曾几何时,字符串是一种保存任意字节序列的便捷方式,但在 .NET 中,如果数据经过过滤以确保其不包含任何无效字符,则它们只能用作保存二进制数据的一种方式或序列。我希望有一种“不可变字节序列”类型可以用于过去由字符串提供服务的目的,但我不知道有一个。

于 2013-09-07T20:10:05.597 回答