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 编码的文件。

最新文章

  1. 对比SerialCommunication和微软的SerialPort,向SerialPort看齐
  2. js笔记——js里的null和undefined
  3. 反射生成SQL语句
  4. 雷达装置 (POJ 1328/ codevs 2625)题解
  5. Java团队项目总结
  6. PHP文件上传代码和逻辑详解
  7. sc7731 Android 5.1 Camera 学习之二 framework 到 HAL接口整理
  8. 显示 EXCEL 的页签列表
  9. 分享功能使用的UIPopoverController在iOS9 过期,替换为popoverPresentationController
  10. cocos2d-x 头文件中添加方法变量导致编译报错
  11. 在一个frame设置四个组件
  12. BZOJ 3992: [SDOI2015]序列统计 [快速数论变换 生成函数 离散对数]
  13. 原生 JavaScript 实现扫雷
  14. [Swift]Xcode标记:MARK、TODO、FIXME
  15. Ubuntu环境下mysql常见的操作
  16. 微信小程序wepy开发,属性绑定的事件参数中可以使用{{}}写实参
  17. 企业案例--生产环节更改mysql字符集
  18. go 删除数组元素
  19. SYN 洪泛攻击
  20. ODS与数据仓库

热门文章

  1. 被 idea 坑了的记录篇
  2. 【03】WAMPServer集成环境下载和安装
  3. [luoguP2038] 无线网络发射器选址(模拟)
  4. [luoguP2949] [USACO09OPEN]工作调度Work Scheduling(贪心 + 优先队列)
  5. Self Centos + Windows server 2016
  6. The Pilots Brothers' refrigerator DFS+枚举
  7. linux 创建 bootable iso 文件
  8. 1.7-BGP②
  9. Android Studio 开发利器【经常使用插件】
  10. MySQL 入门(九)—— 查询数据