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 标记的更多相关文章

  1. 用VIM设置UTF-8编码的BOM标记

    1.去掉BOM标记: :set nobomb 2.加上BOM标记: :set bomb 3.查询当前UTF-8编码的文件是否有BOM标记: :set bomb? 4.更高级一点的: :%!xxd &q ...

  2. 文本编辑BOM标记(Byte Order Mark)

    微软的自带记事本程序notepad.exe会给UTF-8编码的文件头加入三个隐藏的字节(即BOM).这是一种很愚蠢的做法.就是为了让编辑器不去猜测文件本身是ASCII码还是UTF-8. 什么是BOM ...

  3. 去除utf8文件的bom标记

    http://stackoverflow.com/questions/1068650/using-awk-to-remove-the-byte-order-mark http://thegreyblo ...

  4. Qt写入unicode编码格式的文本(用QChar写入BOM标记,并且列出所有Qt支持的字符集)

    1.文本流设置unicode小端模式 2.写入文本前两个字节FF FE 3.字符串转成unicode编码 QList<QByteArray> list = QTextCodec::avai ...

  5. lua去掉字符串中的UTF-8的BOM三个字节

    废话不多说,还是先说点吧,项目中lua读取的text文件如果有BOM,客户端解析就会报错,所以我看了看,任务编辑器swGameTaskEditor 在写入文件的时候,也不知道为什么有的文件就是UTF- ...

  6. 常见编码和编码头BOM

    ANSI(American National Standards Institute,美国国家标准学会)ANSI编码标准是指所有从基本ASCII码基础上发展起来的编码标准,比如扩展的ASCII码(12 ...

  7. php -- PHP5中file_get_contents函数获取带BOM的utf-8文件内容

    最近,在用file_get_contents函数来取得文本的内容的时候,出现了一个情况(如下),苦思冥想了n久,不得其解,最后,果然还是得靠百度啊..... 百度到一个解释,下面是原文: PHP5中的 ...

  8. php对bom的处理

    通常只有在windows的notepad中 , 创建文本文件, 保存为UTF-8 时, 它会自动添加3个字节: ef bb bf. 用editplus来看txt文件就可以看得很清楚. 但是, 只有wi ...

  9. 关于xml加载提示: Error on line 1 of document : 前言中不允许有内容

    我是在java中做的相关测试, 首先粘贴下报错: 读取xml配置文件:xmls\property.xml org.dom4j.DocumentException: Error on line 1 of ...

随机推荐

  1. Codeforces Round #228 (Div. 2)

    做codeforces以来题目最水的一次 A题: Fox and Number Game 题意:就是用一堆数字来回减,直到减到最小值为止,再把所有最小值加,求这个值 sol: 简单数论题目,直接求所有 ...

  2. 常州模拟赛d8t1 友好数对

    分析:其实就是问你有多少对a,b有且仅有两位不相同.我们可以先枚举这两位,对应ai枚举一位,对应bi枚举一位,如果ai^(1<<x) == bi^(1<<y),证明恰好有两位不 ...

  3. 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验

    出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...

  4. cpus Vs cpu period and cpu quota

    1.  https://docs.oracle.com/cd/E37670_01/E75728/html/section-zb1_wqw_gt.html To control a container' ...

  5. $scope的生命周期

    model mutation 模型改变 model observation 模型观察 scope destruction scope结束 神奇的scope,一个angular应用只有一个scope,一 ...

  6. [bzoj 1059][ZJOI 2007]矩阵游戏(二分图最大匹配)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1059 分析:不论如何交换,同一行或同一列的点还是同一行或同一列,如果我们称最后可以排成题目要求 ...

  7. Spring——ClassPathXmlApplicationContext(配置文件路径解析 1)

    ClassPathXmlApplicationContext     在我的 BeanFactory 容器文章中主要提及了 BeanFactory 容器初始化(Spring 配置文件加载(还没解析)) ...

  8. 函数操作(this操作)

    1.apply/call函数:会改变this关键字,并且第一个参数作为this关键字. /*apply与call区别*/ console.log(Array.prototype.join.call([ ...

  9. 1.4-动态路由协议OSPF⑤

    OSPF的特殊区域(Stub/total Stub区域,无法引入外部路由): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 第一种 ...

  10. spark sql读hbase

    项目背景 spark sql读hbase据说官网如今在写,但还没稳定,所以我基于hbase-rdd这个项目进行了一个封装,当中会区分是否为2进制,假设是就在配置文件里指定为#b,如long#b,还实用 ...