架构师_程序员_码农网

查看: 105|回复: 1

[资料] .NET/C# 判断是否包含 BOM 标记

[复制链接]
发表于 2021-7-16 13:22:54 | 显示全部楼层
什么是BOM?

BOM(byte-order mark),即字节顺序标记,它是插入到以UTF-8、UTF16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型。对于UTF-8来说,BOM并不是必须的,因为BOM是用来标记多字节编码文件的编码类型和字节顺序(big-endian或little- endian)。而UTF-8中,每个字符的编码有多少位是通过第一个字节来表述的,而且没有big-endian和little-endian的区分。
UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。
BOM是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order)。微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 ASCII 等编码明确区分开,否则用Excel打开CSV文件有可能是乱码的。但这样的文件在 Windows 之外的操作系统里会带来问题。
「UTF-8」和「带 BOM 的 UTF-8」的区别就是有没有 BOM。即文件开头有没有 U+FEFF。
UTF-8 的网页代码不应使用 BOM,否则常常会出错。当从http 的response输出CSV文件的时候,设置为utf8的时候默认是不带
bom的,但是windows的Excel是使用bom来确认utf8编码的,所有需要把bom写到文件的开头。

QQ截图20210716131118.jpg

一开始开发 Java 代码生成器的时候,会将文件直接写入成 UTF-8 包含 BOM 标记的文件,这样会就导致打包报错,如下:

非法字符: '\ufeff'
QQ截图20210716131033.jpg

如何使用 .NET / C# 判断文件是否包含 BOM 标记呢?,代码如下:



QQ截图20210716131804.jpg

同事,附上将 UTF-8 BOM 格式 转成成 UTF-8 (不带BOM标记)格式,完整代码如下:

(完)





上一篇:SQL SERVER 移除删除分区函数和分区方案
下一篇:SQL Server 数据库各表占用空间大小
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-7-16 22:41:40 | 显示全部楼层
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2021-7-24 22:19

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表