【发布时间】:2018-06-18 21:09:10
【问题描述】:
我想将一个字节数组转换为字符串,然后将其转换回字节数组。我的代码是:
byte[] data = { 250, 15, 1, 220, 127 };
var s = Encoding.Unicode.GetString(data);
var b = Encoding.Unicode.GetBytes(s);
但是,运行代码后 data 和 b 不相等,我也尝试了 UTF7、UTF8、UTF32 和 ASCII 编码。他们都没有正常工作。唯一有效的选项是默认编码。据我所知,它可以从一个系统到另一个系统有所不同,那么我该如何明确定义我的问题的编码?
【问题讨论】:
-
定义
worked properly。只要您使用正确编码,转换就没有问题。这些字节应该包含什么?它绝对不是 ASCII,而且很可能不是任何 Unicode 代码页 -
给定的一组字节不一定总是转换成一个字符串,至少不是一个会回到同一组字节的字符串。这感觉就像XY Problem。
-
恭喜,您已经注意到扩展 ASCII 字符在每个系统上的含义并不相同。解决这个问题的方法是不使用字符串来存储数字数据,如果你的数据确实是字符串,则使用可移植的 Unicode 编码,而不是扩展 ASCII。
-
@HamidReza 您是否尝试序列化二进制数据?在这种情况下,您应该使用像 Convert.ToBase64String 这样的二进制编码
-
@HamidReza 在做什么什么?
I need to convert my byte array into string and back it again不是问题。有成千上万种方法可以做到这一点。但是,如果您想将二进制数据发送到 Web 服务或将数据附加到电子邮件中,有一些标准化的方法可以做到这一点,例如 Base64、Mime 编码等。
标签: c#