我想将包含不可打印字符的字节数组转换为我的应用程序的字符串。当我转换回字节数组,数组的内容应该保持不变,因为我发现,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}.
请帮帮我。
看一下Convert。ToBase64String方法。它将把字节数组转换为字符串。请记住,将数据编码成字符串将占用比原始字节数组更多的空间。
public static string ToBase64String(
byte[] inArray
)
您可以使用FromBase64String
public static byte[] FromBase64String(
string s
)
我认为你的问题是你使用了错误的编码。ASCII定义了128个字符(http://en.wikipedia.org/wiki/ASCII),因此不会给你超过128的字节。
如果你希望回程成功,你需要找到正确的编码并使用它。
我似乎误解了这个问题。我的答案只有在字节数组是一个编码字符串的情况下才有意义——我没有读到说它是不可打印字符的那一点,等等。尼古拉的答案是最合适的。:)使用ascii编码将字节数组转换为字符串,请记住ascii是一个7位协议,编码将剥离第8位或返回到特定值(文档似乎不清楚它是什么!)
引用MSDN;
在。net框架2.0版本之前,。net框架允许通过忽略第8位进行欺骗。从。net框架开始2.0,非ascii码点在解码过程中回落。
使用不同的编码基数作为ASCII将改变所有不可打印的字符为?63年。
当字符串不必是人类可读的不可转换字符的版本时,将其转换为base64 (UUEncode/XXEncode)确实可以达到目的。