阅文时长 | | 0.46分钟 | 字数统计 | | 798.4字符 |
主要内容 | | 1、引言&背景 2、使用C#写入带有/不带有BOM头的文件? 3、对于读取文件时,避免BOM头造成的异常。 4、声明与参考资料 | ||
『C#·对于BOM头之完全解决方案』 | |||
编写人 | | SCscHero | 编写时间 | | 2021/3/13 PM10:38 |
文章类型 | | 系列 | 完成度 | | 待完善 |
座右铭 | 每一个伟大的事业,都有一个微不足道的开始。 |
一、引言&背景 完成度:100%
a) 应对问题
- 如何使用C#写入带有/不带有BOM头的文件?
- 如何使用C#判断文件是否有BOM头?
b) 应用场景
- 处理BOM头的文件。
- 对于读取文件时,避免BOM头造成的异常。
c) 预备知识
- 需要了解 BOM头是什么?。
二、使用C#写入带有/不带有BOM头的文件? 完成度:100%
使用有参构造函数,来确定是否使用BOM头。如下代码:
var utf8WithoutBom = new System.Text.UTF8Encoding(false);//使用构造函数布尔参数指定是否含BOM头,示例false为不含。
var utf8WithBom = new System.Text.UTF8Encoding(false);//使用构造函数布尔参数指定是否含BOM头,示例true为含。
using (var sink = new StreamWriter("WithoutBom.txt", false, utf8WithoutBom))
{
sink.WriteLine("Hello,SCscHero");
}
using (var sink = new StreamWriter("WithBom.txt", false, utf8WithBom))
{
sink.WriteLine("Hello,SCscHero");
}
三、对于读取文件时,避免BOM头造成的异常。 完成度:100%
根据BOM头的特性,我们可以使用判断字节流的方式。如下代码:
var fileByte = System.IO.File.ReadAllBytes(@"TestBom.txt");
var isBom = isBomHeader(fileByte);
Console.WriteLine("是否含有Bom头:{0}",isBom);
可以将判断是否是BOM头的代码封装成一个公用方法,如下代码:
public static bool isBomHeader(byte[] bs)
{
int len = bs.Length;
if (len >= 3 && bs[0] == 0xEF && bs[1] == 0xBB && bs[2] == 0xBF)
{
return true;
}
return false;
}
四、声明与参考资料 完成度:100%
原创博文,未经许可请勿转载。
如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。