5

我想将包含不可打印字符的字节数组转换为我的应用程序的字符串。当我转换回字节数组时,数组的内容应该保持不变,因为我发现 ASCII/Unicode/UTF8 并不总是给我正确的解决方案?

例如

 byte[] bytearray ={ 147, 35, 44, 18, 255, 104, 206, 72 ,69};

 string str = System.Text.Encoding.ASCII.GetString(bytearray);

 bytearray = System.Text.Encoding.ASCII.GetBytes(str);

在上面的例子中,我发现字节数组包含

{ 63, 35, 44, 18, 63, 104, 63, 72 ,69}.

请帮助我。

4

4 回答 4

8

看看Convert.ToBase64String方法。它将字节数组转换为字符串。请记住,编码为字符串的数据将占用比原始字节数组更多的空间。

public static string ToBase64String(
    byte[] inArray
)

然后,您可以使用将字符串解码回字节数组FromBase64String

public static byte[] FromBase64String(
    string s
)
于 2011-11-04T12:36:30.630 回答
1

我认为您的问题是您使用了错误的编码。ASCII 定义了 128 个字符(http://en.wikipedia.org/wiki/ASCII),所以永远不会给你超过 128 个字节。

如果您希望回程成功,您需要找到正确的编码并使用它。

我误读了这个问题。仅当字节数组是编码字符串时,我的答案才有意义-我没有读过说它是不可打印字符等的内容。尼古拉的答案就是要找的答案。:)

于 2011-11-04T12:37:19.003 回答
0

使用不同的编码基础,因为 ASCII 会将所有不可打印的字符更改为 ? 63岁。

当字符串不必是非可读字符的人类可读版本时,确实将其转换为 base64 (UUEncode/XXEncode) 确实可以解决问题。

于 2011-11-04T12:35:30.297 回答
0

您使用 ASCI 编码将字节数组转换为字符串,请记住 ASCI 是一个 7 位协议,编码将剥离第八位或回退到特定值(文档似乎不清楚它的作用!)

引用 MSDN;

在 .NET Framework 2.0 版之前,.NET Framework 允许通过忽略第 8 位进行欺骗。从 .NET Framework 2.0 开始,非 ASCII 代码点在解码过程中回退。

于 2011-11-04T12:40:35.027 回答