阅文时长 | 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. 开源的 Switch 模拟器——GitHub 热点速览 v.21.12

    作者:HelloGitHub-小鱼干 脸滚键盘操作选手小鱼干这里要推荐一个超酷 Switch 模拟器,不能埋没你的游戏天赋.Ryujinx 是一个 C# 写的 Switch 模拟器,1700+ 游戏可 ...

  2. Kubernetes 学习笔记-- kafka往couchdb里倒东西

    首先吐槽下国内这些论坛的技术精神,不是我崇洋媚外,有些复读机烦不烦啊,别人的东西吃进去吐出来好玩么? 还有一些不懂装懂,这种最可恶,明明自己都不明白自己在写什么,还是往精华区发,简直离谱,知道自己多挣 ...

  3. Go-21-结构体

    Go语言的面向对象 其他编程语言大多使用关键字"类"(class)来定义封装对象,表示该类的具体特征,然而Go并不是一个纯面向对象的编程语言.Go语言采用更灵活的"结构体 ...

  4. day17.网络编程2+进程

    1 加入链接循环的套接字服务端 1.1 服务端 ''' 2.1 基于文件类型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套 ...

  5. SSM完整项目(内含源码)

    SSM 电影后台管理项目 概述 通过对数据库中一张表的CRUD,将相应的操作结果渲染到页面上. 笔者通过这篇博客还原了项目(当然有一些隐藏的坑),然后将该项目上传到了Github.Gitee,在末尾会 ...

  6. k8s 创建私有docker仓库 登陆授权令牌的Secret

    参考https://kubernetes.io/zh/docs/tasks/configure-pod-container/pull-image-private-registry/ Kubernete ...

  7. Sublime Text 3 Build 3176 License

    先在hosts文件里加入两行: 127.0.0.1 www.sublimetext.com 127.0.0.1 license.sublimehq.com 目的是防止Sublime Text更新和检测 ...

  8. 【Oauth2.0】Oauth2.0

    一.什么是Oauth2.0? 1.Oauth2.0即(Open Authorization ),Oauth2.0是一个用于第三方授权的开放标准,是Oauth1.0的升级版本,相比1.0版本易于使用: ...

  9. 洛谷P1423 小玉在游泳

    题目描述 小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦.已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%.现在小玉想知道,如果 ...

  10. hdu4920 矩阵乘法%3

    题意:      给你两个矩阵,让你求两矩阵的乘积,然后3取余.矩阵是n*n的,n<=800 思路:        如果什么都不考虑的话,矩阵的乘法是o(n^3)的,800*800*800 = ...