我创建了一个返回(二进制)文件的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);
但最后,原始字节数组和从字符串创建的字节数组不相等。我是否必须使用另一种方法将文件读取到字节数组?
答案 0 :(得分:8)
使用Convert.ToBase64String
将其转换为文字,然后Convert.FromBase64String
再转换回来。
Encoding
用于将文本转换为二进制表示形式,并再次从文本的二进制表示形式转换回文本。在这种情况下,您没有文本的二进制表示 - 您只有任意二进制数据...所以Encoding
是不合适的。即使您使用可以“排序”处理任何二进制数据的编码(例如ISO Latin 1),您也会发现当您拥有控制字符等时,许多传输文本的方法都会失败。
Base64 encoding将为您提供仅为ASCII的文本,并且更容易处理。