简要介绍一下utf-8下bom文件的本质、bom文件的查找(linux命令)、去bom头的方法(linux命令)

461 篇文章 69 订阅
66 篇文章 9 订阅

       之前玩php程序的时候, 出了一个问题, 但肉眼就是看不出来, 百思不得其解。  我明明没有改动自己的php文件啊, 怎么就突然有bug了呢? 后来请教某哥, 他先查了当前php文件的格式, 怀疑是bom问题, 但当前文件是没有bom头的啊,  于是怀疑是基础的php中加入了bom头, 导致当前php有问题了, 后来果真如此, 厉害!

       我在旁边看得一脸懵逼, 什么bom? 听都没听过!  英语是byte order mark.  后来自己也深入了解了一下bom的内容, 其实还是很简单的。 本文以utf-8为例, 来说说有bom和无bom是个什么情况。 请准备好notepad++/UltraEdit这两个基础的工具。

       先用nodepad++写个文件, 内容是:abc,  可以查的16进制是616263, 这就对了, 而且从编辑器下面可以看到Dos\Windows, UTF8,  这些先不说了。 

       现在来转换为有bom的格式(如下是notepad的截图, 从我的经验看, UltraEdit的功能更为强大奋斗):

       我们再看看16进制:ef bb bf 61 62 63,  看看, 多出来的ef bb bf就是bom头, 也就是文件头(这就是bom的本质), 有的程序/软件能识别它, 有的不能识别(此时就有问题了)

       看来, bom头真不是个好东东, 肉眼还看不出问题呢惊恐惊恐惊恐 

 

       那怎么去掉这个bom头呢, 当然就可以用上面的notepad++和UltraEdit了, 但是, 不要忘了, linux命令才是行家, 来看看批量查找bom文件和批量去bom头的方法:

 

taoge@localhost Desktop> xxd a.txt 
0000000: efbb bf61 6263                           ...abc
taoge@localhost Desktop> xxd me/a.txt 
0000000: efbb bf61 6263                           ...abc
taoge@localhost Desktop> find . -type f -print0 | xargs -0r awk '/^\xEF\xBB\xBF/ {print FILENAME} {nextfile}'
./a.txt
./me/a.txt
taoge@localhost Desktop> find . -type f -exec sed -i -e '1s/^\xEF\xBB\xBF//' {} \;
taoge@localhost Desktop> xxd a.txt 
0000000: 6162 63                                  abc
taoge@localhost Desktop> xxd me/a.txt 
0000000: 6162 63                                  abc
taoge@localhost Desktop> find . -type f -print0 | xargs -0r awk '/^\xEF\xBB\xBF/ {print FILENAME} {nextfile}'
taoge@localhost Desktop>  

     

 

     哈哈, 就这么简单。

 


 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值