关于C#:如何安全地将字节数组转换为字符串并返回?

How can I safely convert a byte array into a string and back?

本问题已经有最佳答案,请猛点这里访问。

我真的不在乎编码和东西,只要我得到完全相同的字节数组。

总结一下:如何将字节数组转换成字符串,然后将该字符串转换回我开始使用的相同字节数组?


将字节转换为字符串并返回的最安全的方法是使用base64:

1
2
string base64 = Convert.ToBase64String(bytes);
byte[] bytes = Convert.FromBase64String(base64);

这样就保证不会得到"无效"的Unicode序列,比如没有后半部分的代理项对的前半部分。没有什么可以决定将数据规范化为奇怪的东西(它都是ASCII)。没有机会使用没有用Unicode注册的代码点,或者类似的代码点。哦,你也可以不用太害怕地剪切和粘贴。

是的,每3个字节就有4个字符,但这对于您的数据不会被破坏的知识来说是一个很小的代价。


您可以使用下面的Convert类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// <summary>
/// Converts a string to byte array
/// </summary>
/// <param name="input">The string</param>
/// <returns>The byte array</returns>
public static byte[] ConvertToByteArray(string input)
{
    return input.Select(Convert.ToByte).ToArray();
}

/// <summary>
/// Converts a byte array to a string
/// </summary>
/// <param name="bytes">the byte array</param>
/// <returns>The string</returns>
public static string ConvertToString(byte[] bytes)
{
    return new string(bytes.Select(Convert.ToChar).ToArray());
}

/// <summary>
/// Converts a byte array to a string
/// </summary>
/// <param name="bytes">the byte array</param>
/// <returns>The string</returns>
public static string ConvertToBase64String(byte[] bytes)
{
    return Convert.ToBase64String(bytes);
}


您可以使用convert.tobase64文档http://msdn.microsoft.com/en-us/library/dhx0d524.aspx