在.NET开发中,字节数组和字符串的相互转换是非常基础且常用的操作,不同的编码方式会直接影响转换的结果,错误的编码选择可能导致乱码或者数据丢失。实际开发中需要根据具体场景选择合适的编码类来完成转换操作。
![.NET怎么将字节数组(byte[])和字符串相互转换](/upload/union/20260629/1782672328948210.jpg)
使用Encoding类完成基础转换
.NET中内置的System.Text.Encoding类提供了所有编码转换的核心方法,其中GetBytes方法可以将字符串转换为字节数组,GetString方法可以将字节数组转换为字符串。需要注意的是,转换时使用的编码必须保持一致,否则会出现乱码。
字符串转字节数组
调用Encoding对应编码实例的GetBytes方法,传入需要转换的字符串即可,下面是常用编码的转换示例:
using System;
using System.Text;
class Program
{
static void Main()
{
string testStr = "测试字符串123";
// UTF8编码转换
byte[] utf8Bytes = Encoding.UTF8.GetBytes(testStr);
Console.WriteLine($"UTF8字节数组长度: {utf8Bytes.Length}");
// GBK编码转换,需要添加System.Text.Encoding.CodePages包并注册
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
byte[] gbkBytes = Encoding.GetEncoding("GBK").GetBytes(testStr);
Console.WriteLine($"GBK字节数组长度: {gbkBytes.Length}");
// Unicode编码转换
byte[] unicodeBytes = Encoding.Unicode.GetBytes(testStr);
Console.WriteLine($"Unicode字节数组长度: {unicodeBytes.Length}");
}
}
字节数组转字符串
使用相同编码实例的GetString方法,传入字节数组即可完成转换,转换时如果字节数组不完整或者编码不匹配,会抛出异常或者得到乱码结果:
using System;
using System.Text;
class Program
{
static void Main()
{
string testStr = "测试字符串123";
// 先转成UTF8字节数组
byte[] utf8Bytes = Encoding.UTF8.GetBytes(testStr);
// 用相同编码转回字符串
string result = Encoding.UTF8.GetString(utf8Bytes);
Console.WriteLine($"转换结果: {result}");
// 错误示例:用GBK解码UTF8字节数组,会出现乱码
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
string wrongResult = Encoding.GetEncoding("GBK").GetString(utf8Bytes);
Console.WriteLine($"错误编码转换结果: {wrongResult}");
}
}
不同编码的转换差异
不同的编码方式对字符的存储规则不同,转换得到的字节数组长度也会有差异,下面是几种常用编码的特性对比:
| 编码类型 | 英文存储 | 中文存储 | 适用场景 |
|---|---|---|---|
| UTF8 | 1字节 | 3字节 | 网络传输、跨平台数据交换 |
| Unicode | 2字节 | 2字节 | Windows系统内部字符串处理 |
| GBK | 1字节 | 2字节 | 国内老系统、本地文件存储 |
特殊场景的转换注意事项
- 如果字节数组包含无效的编码序列,
GetString方法可能会抛出异常,可以使用Decoder类的GetChars方法自定义异常处理逻辑。 - 转换Base64编码的字符串时,需要先使用
Convert.FromBase64String将字符串转为字节数组,再使用对应编码转为普通字符串;反向操作则先转字节数组,再用Convert.ToBase64String转为Base64字符串。 - 处理文件流或者网络流时,需要明确流的编码格式,避免默认编码和流编码不一致导致转换错误。
常见问题解答
转换后出现乱码怎么办
首先检查转换时使用的编码是否和原始数据的编码一致,比如原始字符串是GBK编码生成的字节数组,转换时必须用GBK编码的GetString方法,否则就会出现乱码。如果不确定原始编码,可以尝试常见编码逐个测试,或者查看数据的元数据说明。
字节数组转字符串时提示数组越界
这种情况通常是字节数组不完整,比如网络传输时只接收了部分数据就调用转换方法,需要等待所有数据接收完成后再进行转换,或者对不完整的字节数组做截断处理,避免转换时访问越界。
byte[]字符串转换EncodingGetBytesGetString修改时间:2026-06-29 02:45:28