文件编码(码表)
ASCII |
英文码表,每个字符占1个字节。(正数) |
GB2312 |
兼容ASCII,包含中文。每个英文占一个字节(正数),中文占两个字节(负数) |
GBK | 简体中文,兼容gb2312,包含更多汉字。英文占1个字节(正数),中文占两个(1个负数,1个可正可负)GB18030 |
Big5 |
繁体中文 |
Unicode |
国际码表,中文英文都站2个字节。 |
UTF-8 |
国际码表,英文占1个字节,中文占3个字节。 |
文本文件编码:
文本文件有不同的存储方式,UTF-8、ASCII、Unicode等,如果出现乱码一般就是编码的问题。
文本文件相关的函数一般都有一个Encoding类型的参数,取得编码的方式:Encoding.Default、Encoding.UTF8、Encoding.GetEncoding("GBK")。
乱码(只有文本文件才会乱码):原因:文本文件存储时采用的编码,与读取时采用的编码不一致。解决:采用统一的编码。
文件流
创建文件流语法格式: FileStream fileStream = new FileStream(参数);
流操作的都是字节,不能直接操作字符串。
文件流的使用步骤
1 、创建文件流
FileStream fs = new FileStream(文件,文件操作模式,访问方式);
2、使用文件流,执行读写操作
fs.Write(参数1,参数2,参数3);
- 参数1:表示将指定的字节数组中的内容写入到文件
- 参数2:参数1的数组偏移量,一般为0;
- 参数3:本次文件写入操作要写入的实际字节个数
3、清空缓冲区,关闭文件流,释放资源
fs.Flush();
fs.Close();
fs.Dispose();
读写操作代码示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace Test_CSharp
{
class Program
{
static void Main(string[] args)
{
using (FileStream fs = new FileStream(@"E:\Test\abc.txt", FileMode.Create, FileAccess.Write))
{
string s = "lalala";
byte[] b = Encoding.UTF8.GetBytes(s);
fs.Write(b, 0, b.Length);
}
using (FileStream ff = new FileStream(@"E:\Test\abc.txt", FileMode.Open, FileAccess.Read))
{
byte[] bb = new byte[1024];
int i = ff.Read(bb, 0, bb.Length);
if (bb.Length > 0)
{
string ss = Encoding.UTF8.GetString(bb);
Console.WriteLine(ss);
}
}
Console.ReadKey();
}
}
}
--->
lalala