BOM 标记
BOM 是 Byte Order Mark 的简称,即字节序标记。用于标记文本流:
- 表示文本流的字节顺序,是小端序(little-endian)还是大端序(big-endian);
- 表示文本流是 Unicode 字符;
- 表示文本流的编码方式。
几种编码方式的 BOM 值:
- UTF-8:0xEFBBBF
- UTF-16(BE):0xFEFF
- UTF-16(LE):0xFFFE
- UTF-32(BE):0x0000FEFF
- UTF-32(LE):0xFFFE0000
.NET 中的字符串内部表示统一是 UTF-8 编码。写入文件时,默认也是 UTF-8 编码。.NET 可以生成两种 UTF-8 编码的文本文件:带 BOM 与不带 BOM,默认为生成不带 BOM 的文件。
// 生成不带 BOM 的文件
StreamWriter sw = new StreamWriter(file);
// 生成带 BOM 的文件
StreamWriter sw = new StreamWriter(file, true, Encoding.GetEncoding("UTF-8"));
Office(Word, Excel, PowerPoint)、记事本(NotePad)等读取带有 BOM 标记的 UTF-8 编码的文件时,没有问题,但读取不带 BOM 的 UTF-8 文件时,有时能够正确解析,一般情况下都不能正确解析,从而造成显示乱码。所以,要生成供 Office 读取的 UTF-8 文件时,一定要带有 BOM 标记。
下面的代码用于生成客户端下载的文件(data.xls):

其中,ExcelExport(file, col, style) 生成带 BOM 标记的 UTF-8 文件,context.Response.WriteFile(file) 将文件内容写入输出流(带有 BOM 标记)。这样,客户端下载的 data.xls 文件即是带有 BOM 标记的 UTF-8 编码的文件。
BOM 标记的更多相关文章
- 用VIM设置UTF-8编码的BOM标记
1.去掉BOM标记: :set nobomb 2.加上BOM标记: :set bomb 3.查询当前UTF-8编码的文件是否有BOM标记: :set bomb? 4.更高级一点的: :%!xxd &q ...
- 文本编辑BOM标记(Byte Order Mark)
微软的自带记事本程序notepad.exe会给UTF-8编码的文件头加入三个隐藏的字节(即BOM).这是一种很愚蠢的做法.就是为了让编辑器不去猜测文件本身是ASCII码还是UTF-8. 什么是BOM ...
- 去除utf8文件的bom标记
http://stackoverflow.com/questions/1068650/using-awk-to-remove-the-byte-order-mark http://thegreyblo ...
- Qt写入unicode编码格式的文本(用QChar写入BOM标记,并且列出所有Qt支持的字符集)
1.文本流设置unicode小端模式 2.写入文本前两个字节FF FE 3.字符串转成unicode编码 QList<QByteArray> list = QTextCodec::avai ...
- lua去掉字符串中的UTF-8的BOM三个字节
废话不多说,还是先说点吧,项目中lua读取的text文件如果有BOM,客户端解析就会报错,所以我看了看,任务编辑器swGameTaskEditor 在写入文件的时候,也不知道为什么有的文件就是UTF- ...
- 常见编码和编码头BOM
ANSI(American National Standards Institute,美国国家标准学会)ANSI编码标准是指所有从基本ASCII码基础上发展起来的编码标准,比如扩展的ASCII码(12 ...
- php -- PHP5中file_get_contents函数获取带BOM的utf-8文件内容
最近,在用file_get_contents函数来取得文本的内容的时候,出现了一个情况(如下),苦思冥想了n久,不得其解,最后,果然还是得靠百度啊..... 百度到一个解释,下面是原文: PHP5中的 ...
- php对bom的处理
通常只有在windows的notepad中 , 创建文本文件, 保存为UTF-8 时, 它会自动添加3个字节: ef bb bf. 用editplus来看txt文件就可以看得很清楚. 但是, 只有wi ...
- 关于xml加载提示: Error on line 1 of document : 前言中不允许有内容
我是在java中做的相关测试, 首先粘贴下报错: 读取xml配置文件:xmls\property.xml org.dom4j.DocumentException: Error on line 1 of ...
随机推荐
- [luoguP3252] [JLOI2012]树(DP)
传送门 树上前缀和. 在树上找一条权值和为 s 的链,其中这个链上的点按深度递增(递减)(不同) dfs 每搜到一个点求它的前缀和 sum[x],放入 set 中. 在 set 中找 sum[x] - ...
- 由MTK平台 mtkfb 设备注册疑问引发的知识延伸--ARM Device Tree
问题: 在kernel-3.10\drivers\misc\mediatek\videox\mt6735\mtkfb.c里面int __init mtkfb_init(void) 有看到 platfo ...
- Spring @Conditional注解 详细讲解及示例
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xcy1193068639/article/details/81491071 前言: @Conditi ...
- S - Arc of Dream 矩阵快速幂
An Arc of Dream is a curve defined by following function: where a 0 = A0 a i = a i-1*AX+AY b 0 = B0 ...
- Node.js 博客实例(三)添加文件上传功能
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件眼下有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 For ...
- TreeView获取目录下的所有文件
/// <summary> /// TreeView获取目录下的所有文件 /// </summary> /// <param name="tree"& ...
- MySQL 入门(九)—— 查询数据
查询数据就是从数据库中获取所须要的数据. 1.基本查询语句 即Select语句 当中.属性列表表示要查询的字段名.表名和视图列表表示从此处指定的表或者视图中查询数据.能够有多个:条件表达式1制定了查询 ...
- DetachedCriteria的使用
设计上能够灵活的依据 Criteria 的特点来方便地进行查询条件的组装.如今对 Hibernate的Criteria 的使用方法进行总结: Hibernate 设计了 CriteriaSpec ...
- hdu 2255奔小康赚大钱 KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=2255 一,KM算法:(借助这个题写一下个人对km的理解与km模板) KM算法主要是用来求解图的最优匹 ...
- Centos 7 nginx-1.12.0 配置学习(一)
[root@bogon nginx]# vim nginx.conf #user nobody; #运行用户 worker_processes ; #启动进程,通常设置成和cpu核心数相等 #全局错误 ...