从上图可以看出,字节数组和字符串的转换必然涉及到某种编码方式,不同的编码方式由不同的转换结果。在C#中,可以使用System.Text.Encoding来管理常用的编码。
下面的代码展示了如何在字节数组和字符串之间进行转换(分别使用UTF8、GB2312以及Unicode三种编码方式):
public class Program
{
public static void Main(string[] args)
{
string s = "我是字符串,I am a string!";
// 字节数组 -> 字符串
Byte[] utf8 = StringToByte(s, Encoding.UTF8);
Byte[] gb2312 = StringToByte(s, Encoding.GetEncoding("GB2312"));
Byte[] unicode = StringToByte(s, Encoding.Unicode);
Console.WriteLine(utf8.Length);
Console.WriteLine(gb2312.Length);
Console.WriteLine(unicode.Length);
// 字符串 -> 字符数组
Console.WriteLine(ByteToString(utf8, Encoding.UTF8));
Console.WriteLine(ByteToString(gb2312, Encoding.GetEncoding("GB2312")));
Console.WriteLine(ByteToString(unicode, Encoding.Unicode));
Console.ReadKey();
}
// 字符串 -> 字节数组
static Byte[] StringToByte(string str, Encoding encoding)
{
if (string.IsNullOrEmpty(str))
{
return null;
}
return encoding.GetBytes(str);
}
// 字节数组 -> 字符串
static string ByteToString(Byte[] bytes, Encoding encoding)
{
if (bytes == null || bytes.Length <= 0)
{
return string.Empty;
}
return encoding.GetString(bytes);
}
}
上述代码的运行结果如下图所示:
我们也可以从上图中看出,不同的编码方式产生的字节数组的长度各不相同。