BOM头问题
最近有不少在微博上谈论BOM头问题,BOM头会造成页面展示的乱码,xml分析出现问题。而我恰巧遇到一种情况,在wml页面中如果加上BOM头,PC浏览器(IE,火狐)和手机浏览器(UC)都很正常,而如果去除BOM头,则手机端正常,PC端不正常。为此,对BOM头和编码做些简单的研究。
1、什么是BOM头
对于使用windows的记事本编辑文本,在采用UTF-8编码保存的时候,会给文本加上三个看不见的字节 0xEF 0xBB 0xBF,有些文章把这三个字节称为三个字符 是不对的,实际上这三个字节如果按照UTF-8解码,表示的是一个字符,这个字符表示没有显示,又不同于空格,我们先把这三个字节做一下转换
| 编码 | UTF8编码16进制 | unicode编码16进制 | unicode编码10进制 |
| 值 | EFBBBF | FEFF | 65279 |
通过网上根据编码查看汉字的工具查看确认一下(http://www.mytju.com/classcode/tools/encode_utf8.asp)

可以看出来,这是一个没有任何显示的字符,那么这样一个字符的用处是什么呢?实际上这个字符被windows的文本编辑器用来作为字符编码区分的标记,在windows系统下,一旦发现文本的前三个字节是EFBBBF,则确认整个文本是按照utf-8做的编码。
2、BOM头的一般处理过程
a、linux下查看文件是否有BOM头的办法
一般的linux服务器带有一个xxd命令,可以以16进制的形式打开查看。
b、查看项目下面哪些文件拥有bom头
方法很多,网上一般提供grep -r -I -l $'^\xEF\xBB\xBF' ./ 也就是在一个项目下,循环项目里面的文件,不区分大小写,查看是否已十六进制下的EFBBBF开头的文件,输出文件名信息
c、去除bom头
单个文件去除bom头可以用Vi打开文件,set nobomb后保存一下就可以去除,同理如果想加bom头,set bomb即可, 而如果去除某个项目下所有存在bom头的文件,一般需要写脚本来实现,在php下面
a1、循环读取每一个文件
b1、利用substr()查看文件的前三个字节,将字节转成十进制查看
"EF" => 239
"BB" => 187
"BF" => 191
c1、如果查看到前三个字节是BOM头,则用substr()截取之后的文字写入
BOM头问题的更多相关文章
- 什么是BOM头,BOM头有什么影响,怎么去掉BOM头
什么是bom头? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也 ...
- 详解BOM头以及去掉BOM头的方法
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别 ...
- PHP 版去bom头
原理: 找出文件前3个字符 如果它们对应的ASCII 值分别是 239,187,191 则判断为bom头,去掉前3个字符. 代码实现如下: $basedir = isset($_GET['dir'] ...
- linux下bom头导致的php调用php接口 返回的json字符串 无法转成 数组,即json字符串无法解码的问题
今天很是郁闷,写了一个php接口,返回的是标准的json字符串,但是调用的php 就是无法json_decode(),返回错误码为4,最后终于找到原因,原来是蒙一个文件中有bom头,最后采用一个命令 ...
- 检测文件是否有BOM 头,并删除BOM头(php)
将下面文件放在网站根目录访问即可,它会遍历当前目录下所有子目录,检测文件是否含有BOM头,并删除BOM头 <?php //remove the utf-8 boms //by magicbug ...
- UTF-8 BOM头
BOM是什么 Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS.UCS可以看作是"Unic ...
- linux下查找包含BOM头的文件和清除BOM头命令
查找包含BOM头的文件,命令如下: grep -r -I -l $'^\xEF\xBB\xBF' ./ 这条命令会查找当前目录及子目录下所有包含BOM头的文件,并把文件名在屏幕上输出. 但 ...
- 什么是BOM头
什么是BOM头? BOM头是放在UTF-8编码的文件的头部的,占用三个字节,用来标识该文件属于UTF-8编码.现在已经有很多软件识别BOM头,但是还有些不能识别BOM头,比如PHP就不能识别BOM头, ...
- 什么是BOM头,及PHP解决办法
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别 ...
- 一个批量移除BOM头的bash脚本
有时候我们的文件可能不需要BOM头,例如:我们公司的SVN服务器提供的代码都UTF8编码保存(不能有BOM头)否则代码提交不上去. 文件很多的时候就需要批量操作. 脚本使用方法:remove-bom. ...
随机推荐
- Chapter 6 — Improving ASP.NET Performance
https://msdn.microsoft.com/en-us/library/ff647787.aspx Retired Content This content is outdated and ...
- LTE发射机ACLR性能的测量技术
现代无线服务提供商正致力于不断扩大带宽,为更多用户提供互联网协议(IP)服务.长期演进技术(LTE)是对当前部署的3GPP 网络进行增强并创造更多更重要应用的新一代蜂窝技术.LTE 的体系结构复杂同时 ...
- BZOJ2276: [Poi2011]Temperature
2276: [Poi2011]Temperature Time Limit: 20 Sec Memory Limit: 32 MBSubmit: 293 Solved: 117[Submit][S ...
- 如何获取jqGrid中选择的行的数据
原文地址:http://hi.baidu.com/feifan3211/item/c5831f44158761a5df2a9fc1 如何获取jqGrid中选择的行的数据? 下面可以获取选择一行的id, ...
- Android新浪微博客户端(六)——Home界面的ListView
原文出自:方杰|http://fangjie.info/?p=184转载请注明出处 最终效果演示:http://fangjie.info/?page_id=54该项目代码已经放到github:http ...
- UIAlertController 的使用——NS_CLASS_AVAILABLE_IOS(8_0)
UIAlertView 随着苹果上次iOS 5的发布,对话框视图样式出现在了我们面前,直到现在它都没有发生过很大的变化.下面的代码片段展示了如何初始化和显示一个带有“取消”和“好的”按钮的对话框视图. ...
- Object-C 点语法 -- 笔记
第一种是经典方式, 第一种是点语法.
- 写自己的WPF样式 - 窗体
初试WPF样式,感觉还不错.上篇写完了按钮的样式下面写窗体,废话不多说直接上代码: (1)定义一个窗体样式"MyWpfWindow" <Style x:Key="M ...
- vector的含义
数学中,vector(向量)表示一个量,由大小和方向构成.比如坐标中的一个带箭头的线段 -- 它1厘米长,正弦值六分之一π(30度角). 计算机的c++.java中,vector表示一种一维的数组.比 ...
- apache在windows上开启gzip的方法
环境搭建好之后,默认并没有开启gzip功能.需要修改apache的httpd.conf配置文件进行开启.开启方法如下:1. httpd.conf中打开deflate_Module和headers_Mo ...