将二进制文件转换为字符串,反之亦然

时间:2010-08-10 09:31:01

标签: c# .net encoding

我创建了一个返回(二进制)文件的web服务。不幸的是,我不能使用byte []所以我必须将字节数组转换为字符串。 我现在做的是以下(但它不起作用):

将文件转换为字符串:

byte[] arr = File.ReadAllBytes(fileName);
System.Text.UnicodeEncoding enc = new System.Text.UnicodeEncoding();  
string fileAsString = enc.GetString(arr);  

要检查这是否正常,我会通过以下方式将其转换回来:

System.Text.UnicodeEncoding enc = new System.Text.UnicodeEncoding();
byte[] file = enc.GetBytes(fileAsString);

但最后,原始字节数组和从字符串创建的字节数组不相等。我是否必须使用另一种方法将文件读取到字节数组?

1 个答案:

答案 0 :(得分:8)

使用Convert.ToBase64String将其转换为文字,然后Convert.FromBase64String再转换回来。

Encoding用于将文本转换为二进制表示形式,并再次从文本的二进制表示形式转换回文本。在这种情况下,您没有文本的二进制表示 - 您只有任意二进制数据...所以Encoding是不合适的。即使您使用可以“排序”处理任何二进制数据的编码(例如ISO Latin 1),您也会发现当您拥有控制字符等时,许多传输文本的方法都会失败。

Base64 encoding将为您提供仅为ASCII的文本,并且更容易处理。