Encoding.UTF8
是 .NET 中用于处理 UTF-8 编码的标准编码类。UTF-8
是一种可变长度的字符编码方案,它可以表示所有 Unicode 字符,并且与 ASCII 兼容。Encoding.UTF8
是 System.Text.Encoding
类的一个静态属性,提供了对 UTF-8 编码和解码的支持。
主要功能
-
编码字符串为字节数组:将一个字符串转换为 UTF-8 编码的字节数组。
string text = "Hello, World!"; byte[] bytes = Encoding.UTF8.GetBytes(text);
-
解码字节数组为字符串:将一个 UTF-8 编码的字节数组转换为字符串。
byte[] bytes = Encoding.UTF8.GetBytes("Hello, World!"); string text = Encoding.UTF8.GetString(bytes);
-
获取字节数组长度:计算将字符串编码为 UTF-8 时所需的字节数。
string text = "Hello, World!"; int byteCount = Encoding.UTF8.GetByteCount(text);
-
从流中读取 UTF-8 编码的文本:使用
StreamReader
读取流中的 UTF-8 编码的文本。using (FileStream fs = new FileStream(@"C:\file.txt", FileMode.Open)) using (StreamReader reader = new StreamReader(fs, Encoding.UTF8)) { string content = reader.ReadToEnd(); }
-
将文本写入流时使用 UTF-8 编码:使用
StreamWriter
将文本写入流并进行 UTF-8 编码。以下是一个完整的示例,展示如何使用Encoding.UTF8
进行字符串的编码和解码操作:
using System;
using System.Text;
class Program
{
static void Main()
{
// 定义一个字符串
string originalText = "Hello, World!";
// 将字符串编码为 UTF-8 字节数组
byte[] utf8Bytes = Encoding.UTF8.GetBytes(originalText);
Console.WriteLine("Encoded bytes: " + BitConverter.ToString(utf8Bytes));
// 将 UTF-8 字节数组解码为字符串
string decodedText = Encoding.UTF8.GetString(utf8Bytes);
Console.WriteLine("Decoded text: " + decodedText);
}
}
注意事项
-
兼容性:UTF-8 是一种可变长度编码方式,字节数可以从 1 到 4 不等,但它向后兼容 ASCII(0 到 127 的 Unicode 代码点用单字节表示)。
-
字节顺序标记 (BOM):UTF-8 编码通常不需要字节顺序标记 (BOM),但在某些情况下,可以选择添加 BOM 来标识文件编码。这在
StreamReader
和StreamWriter
中可以通过相应的构造函数来控制。
Encoding.UTF8
提供了对 UTF-8 编码的高效支持,是处理国际化文本和文件时常用的编码方案。
------------
FileStream
可以处理各种文件类型。对于二进制数据,你可以直接读写字节。例如:
// 写入二进制数据
using (FileStream fs = new FileStream("example.bin", FileMode.Create))
{
byte[] data = { 0x01, 0x02, 0x03 };
fs.Write(data, 0, data.Length);
}
// 读取二进制数据
using (FileStream fs = new FileStream("example.bin", FileMode.Open))
{
byte[] buffer = new byte[3];
fs.Read(buffer, 0, buffer.Length);
}
对于文本文件,你可以结合 StreamReader
和 StreamWriter
使用 FileStream
进行更高层次的文本操作。例如:
// 写入文本数据
using (FileStream fs = new FileStream("example.txt", FileMode.Create))
using (StreamWriter writer = new StreamWriter(fs, Encoding.UTF8))
{
writer.WriteLine("Hello, World!");
}
// 读取文本数据
using (FileStream fs = new FileStream("example.txt", FileMode.Open))
using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
{
string content = reader.ReadToEnd();
}
这样,FileStream
提供了灵活性,可以根据需要处理不同类型的数据。
--------------
FileStream
类
- 目的:提供对文件的流式读写操作。
- 重要构造函数:
FileStream(string path, FileMode mode)
:创建一个FileStream
对象,用于指定路径的文件。FileMode
指定文件的创建、打开、覆盖等方式。
- 重要方法:
Read(byte[] array, int offset, int count)
:从当前FileStream
对象读取字节数据并存储到字节数组中。Write(byte[] array, int offset, int count)
:将字节数组中的数据写入当前FileStream
对象。Seek(long offset, SeekOrigin origin)
:移动文件流的位置指针。
StreamReader
类
- 目的:提供用于从文件读取字符的流。
- 重要构造函数:
StreamReader(string path)
:初始化StreamReader
对象,用于读取指定路径的文件。
- 重要方法:
Read()
:读取下一个字符并返回。返回值为字符的整数表示(Unicode 码点),如果已到达流的末尾,则返回 -1。ReadLine()
:读取当前行的文本,并返回到行尾的所有字符,不包括行终止符。ReadToEnd()
:读取到流的末尾,并返回所有剩余的字符作为一个字符串。
StreamWriter
类
- 目的:提供用于将字符写入文件的流。
- 重要构造函数:
StreamWriter(string path)
:初始化StreamWriter
对象,用于写入指定路径的文件。
- 重要方法:
Write(string value)
:将指定的字符串写入流。WriteLine(string value)
:将指定的字符串写入流,并在写入的字符串后添加一个行终止符。Flush()
:清除缓冲区中的所有内容,确保所有数据都写入基础文件流。