UTF-8 BOM头
BOM是什么
Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。在UCS 编码中有一个叫做 "Zero Width No-Break Space",中文译名作“零宽无间断间隔”的字符,它的编码是 FEFF。而 FFFE 在 UCS 中是不存在的字符,所以不应该出现在实际传输中。UCS 规范建议我们在传输字节流前,先传输字符 "Zero Width No-Break Space"。这样如果接收者收到 FEFF,就表明这个字节流是 Big-Endian 的;如果收到FFFE,就表明这个字节流是 Little- Endian 的。因此字符 "Zero Width No-Break Space" (“零宽无间断间隔”)又被称作 BOM(即Byte Order Mark)。
UTF-8 BOM头又是什么
UTF-8以字节为编码单元因此不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 "Zero Width No-Break Space" 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。
因此UTF-8编码的字符串开头处的三个bytes 0xef,0xbb,0xbf就称为UTF-8 BOM头。
为什么excel打开没有BOM头的csv文件会乱码?
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入UTF-8 BOM头。记事本等编辑器通过它来识别这个文件是否以UTF-8编码(当然即便没有UTF-8 BOM头记事本也能通过其它方式正确识别UTF-8编码)。
那么如果一个UTF-8编码的字符串的开头处没有BOM头又会发生什么?
比如我们用C#创建一个csv文件,里面保存中文,日文等多国语言的字符串然后以UTF-8编码保存(此时没有UTF-8 BOM头)。
记事本能够识别,但是excel却识别出错:
这是一个已知的问题,Excel打开没有BOM头的csv文件时就是会这样!
解决的办法也很简单,在生成字符串时手动把UTF-8 BOM头添加在字符串的开头处,下面是C#代码:
sb.Append('\uFEFF');
好了,重新用Excel打开,已经可以正确识别了!
本文转自sparkdev博客园博客,原文链接:http://www.cnblogs.com/sparkdev/p/5676654.html,如需转载请自行联系原作者
UTF-8 BOM头相关推荐
- UTF-8的BOM头
字符编码相关信息 http://baike.baidu.com/view/1204863.htm UTF-8 编码的文件可以分为no BOM 和 BOM两种格式. 有bom头的存储或者字节流,它一定 ...
- bug:生产问题,Golang解决csv文件用excel打开中文乱码问题及常见编码和BOM头关系
bug:Golang解决csv文件用excel打开中文乱码问题 1 场景及分析 场景:今天在生成csv文件之后,测试发现用office和wps打开乱码 分析:经过测试之后发现使用记事本打开不乱码,同时 ...
- bom头解释方法和去掉方法
什么是bom头? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也 ...
- 编码问题(BOM头简单了解)
浅谈编码问题 中文编码 gb2312 (采用两个字节保存字符汉字,英文数字一个字节) GBK (采用两个字节保存字符汉字,英文数字一个字节) GB18030 (英文数字都是一个字节,中文是两个或四个字 ...
- [java]处理utf-8 bom字符串的bom头
char[] bomChar = "带bom的字符串".toCharArray();//转为char数组 char[] noneBomchar = new char[bomChar ...
- 解释BOM头和去掉方法
http://www.thinkphp.cn/topic/2592.html 以上是叫你去掉bom头的,因为有些文件加载不出来就是window会以记事本的形式打开,然后默认给我们加了了bom头,有些文 ...
- php 头bom_关于php中bom头的简介
关于php中bom头的简介 发布时间:2020-06-30 17:48:12 来源:亿速云 阅读:99 作者:清晨 这篇文章主要介绍关于php中bom头的简介,文中示例代码介绍的非常详细,具有一定的参 ...
- 由web程序出现乱码开始挖掘(Bom头、字符集与乱码)
从第一次开始写web程序,自己还有身边同事开发出现乱码情况基本都没有消停过.估计以后还会一样继续. 这么些年,不断修修改改,也总结也归纳.程序从asp,asp.net,jsp,php,服务器从wind ...
- Java处理文件BOM头的方式推荐
背景: java普通的文件读取方式对于bom是无法正常识别的. 使用普通的InputStreamReader,如果采用的编码正确,那么可以获得正确的字符,但bom仍然附带在结果中,很容易导致数据处理出 ...
最新文章
- Apache 基金会发布2018财年年报:Java 项目占大半
- C实现socket编程
- 【MM模块】Physics Inventory 库存盘点差异
- 笔记-项目整体管理-项目工作说明书
- 算法 --- 二叉树的最大深度
- C语言方向键识别和字母识别,c语言中怎样输入和读取方向键
- ReportLab for PDF
- python解题软件哪个好用_几个好用的Python数据分析工具
- 移动GPU三种主流架构优缺点浅析
- 使用ASP.NET Web API和Handlebars的Web模板
- Hibernate之ID生成规则
- 基于Chrome插件的微博超话自动签到
- TCP 协议有什么缺陷?
- FFmpeg转码B帧
- ESP8266 简单研究 ESP8285 研究
- 手动删除Mac版迅雷无用的功能,让迅雷软件更清爽无广告纯粹下载
- 05.Node.js和浏览器之间的差异
- LoadBalancer负载均衡
- 故障排查——CPU使用率过高
- android 消息提示机制