阅文时长 | 0.46分钟 字数统计 | 798.4字符
主要内容 | 1、引言&背景
2、使用C#写入带有/不带有BOM头的文件?
3、对于读取文件时,避免BOM头造成的异常。
4、声明与参考资料
『C#·对于BOM头之完全解决方案』
编写人 | SCscHero 编写时间 | 2021/3/13 PM10:38
文章类型 | 系列 完成度 | 待完善
座右铭 每一个伟大的事业,都有一个微不足道的开始。

一、引言&背景   完成度:100%

a) 应对问题

  1. 如何使用C#写入带有/不带有BOM头的文件?
  2. 如何使用C#判断文件是否有BOM头?

b) 应用场景

  1. 处理BOM头的文件。
  2. 对于读取文件时,避免BOM头造成的异常。

c) 预备知识

  1. 需要了解 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即可。

C#·对于BOM头之完全解决方案的更多相关文章

  1. 读取含有BOM头的文件遇到的问题

    需求是读取一个csv文件,然后解析成对应的数据结构.csv必须包含指定的某些列,通过列名header来进行校验. 解析配置文件的方法. public List<QuestionData> ...

  2. 寻虫记:BOM头制造的冤案,无故多出空白行

    最近在做的一个网站发生了一个很诡异的BUG: 使用IE浏览页面时,一切都挺正常: 而使用Firefox浏览时,发现某些页面元素之间的距离比预期的要宽很多,HTML元素本身的hight.padding和 ...

  3. Java处理文件BOM头的方式推荐

    背景: java普通的文件读取方式对于bom是无法正常识别的. 使用普通的InputStreamReader,如果采用的编码正确,那么可以获得正确的字符,但bom仍然附带在结果中,很容易导致数据处理出 ...

  4. BOM头导致 php获取数据出现问题

    1.BOM头导致 php获取数据出现问题   2.access-token 存redis 解决方案:存redis 一.下载redis驱动 二.配置redis

  5. 什么是BOM头,BOM头有什么影响,怎么去掉BOM头

    什么是bom头? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也 ...

  6. 详解BOM头以及去掉BOM头的方法

    类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别 ...

  7. PHP 版去bom头

    原理: 找出文件前3个字符 如果它们对应的ASCII 值分别是  239,187,191 则判断为bom头,去掉前3个字符. 代码实现如下: $basedir = isset($_GET['dir'] ...

  8. linux下bom头导致的php调用php接口 返回的json字符串 无法转成 数组,即json字符串无法解码的问题

    今天很是郁闷,写了一个php接口,返回的是标准的json字符串,但是调用的php 就是无法json_decode(),返回错误码为4,最后终于找到原因,原来是蒙一个文件中有bom头,最后采用一个命令 ...

  9. 检测文件是否有BOM 头,并删除BOM头(php)

    将下面文件放在网站根目录访问即可,它会遍历当前目录下所有子目录,检测文件是否含有BOM头,并删除BOM头 <?php //remove the utf-8 boms //by magicbug ...

随机推荐

  1. Vulkan移植GpuImage(二)Harris角点检测与导向滤波

    Harris角点检测 UI还是用的上次扣像的,只有前后置可以用,别的没有效果,只看实现就好. 相应源码 在实现之前,我先重新整理编译glsl的生成工具,如Harris角点检测中间计算过程需要针对rgb ...

  2. (原创)在Linux上安装运行Python3(CentOS7为例)

    在win10上开发好的python项目要部署在Linux上要面对的问题:怎么在Linux上跑py文件呢? 以Lunix CentOS7.x平台为例,CentOS系统上自带的已有python2.x 的版 ...

  3. Hadoop学习笔记—HDFS

    目录 搭建安装 三个核心组件 安装 配置环境变量 配置各上述三组件守护进程的相关属性 启停 监控和性能 Hadoop Rack Awareness yarn的NodeManagers监控 命令 hdf ...

  4. kubernetes中有状态应用的优雅缩容

    将有状态的应用程序部署到Kubernetes是棘手的. StatefulSet使它变得容易得多,但是它们仍然不能解决所有问题.最大的挑战之一是如何缩小StatefulSet而不将数据留在断开连接的Pe ...

  5. MySQL5.7和MySQL8.0通用配置文件

    MySQL5.7 my.cnf配置 [client] port=3306 socket=/log/mysql/mysql.sock [mysql] socket=/log/mysql/mysql.so ...

  6. Redis系列-存储篇sorted set主要操作命令

    Redis系列-存储篇sorted set主要操作函数小结 redis支持有序集合,即sorted set.sorted set在set的基础上,增加了排序属性,是set的升级版.这里简要谈谈sort ...

  7. [Fundamental of Power Electronics]-PART II-8. 变换器传递函数-8.3 阻抗和传递函数图形的构建

    8.3 阻抗和传递函数图形的构建 通常,我们可以通过观察来绘制近似的bode图,这样没有大量混乱的代数和不可避免的有关代数错误.使用这种方法可以对电路运行有较好的了解.在各种频率下哪些元件主导电路的响 ...

  8. OO_Unit4_Summary暨课程总结

    初始oo,有被往届传言给吓到:oo进行中,也的确有时会被作业困扰(debug到差点放弃):而oo即将结束的此刻,却又格外感慨这段oo历程. 一.单元架构设计 本单元任务是设计一个UML解析器,能够支持 ...

  9. IntelliJ IDEA/Android Studio插件开发指南

    前言 目前在为安卓手机QQ做自动化的相关工作,包括UI自动化,逻辑层自动化等.使用到的uiautomator等框架,需要在Android Studio进行编码工作. 其中很多工作如果做到插件化的话,可 ...

  10. 前端框架之争丨除了Vue、Angular和React还有谁与之争锋

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/most-popular-frontend-f ...