本文共 2535 字,大约阅读时间需要 8 分钟。
在linux下做 html与 css文件合并脚本的时候发现读取的 css文件中不管怎么做都会多一表“<reff>”标记,查资料发现这表东西叫做“字节顺序记号”,是UTF-8文件的一部份,一般浏览器中 看不出来,但是用 vim就能看得到。如果直接复制到HTML则会把它当做一个字符,会影响到代码的执行。由于我用的是VIM工具,所以过滤起来还比较简单,直接删除就好了。其它工具也可以,不过得自己写代码删除了,这个字符var_dump的结果是三个字符。
有些编辑器,比如M$ Windows的记事本,在创建UTF8编码文件时会在头部添加一个不可见字符。这个字符可以通过vim查看到,而且如果是一个php文件,php4、php5在解析时均会有输出。
原来这个被称作BOM(Byte Order Mark)的不可见字符,是Unicode用来标识内部编码的排列方式的,在UTF-16、UTF-32编码里它是必需的,而在UTF-8里是可选的。因 此,才会出现有的编辑器在文件头部添加添加BOM、而有的语法解析器又不作处理的的混乱情况。
根据w3c里FAQ的建议,解决方法就是,删无赦!
**************************
linux下处理windows utf8文件,发现vim头会多一个<feff>
一般默认创建的文件都是ANSI编码的。用记事本打开这个文件,点"另存为",最下面有个"编码(Encoding)"可以选择,里面有"ANSI,utf8"等选项。
下面介绍用直接使用perl创建一个UTF-8的文件
open( OUT, ">:utf8", "a.txt" ) or die "a.out: $!"; print OUT "\x{feff}"; print OUT "aaaa\n"; close OUT;
反过来,删除文件中的<feff>头
open (FH, '<:utf8',"$_" ) or die $!;
...
s/\x{feff}//;
...
转载地址:http://bwbsi.baihongyu.com/
請注意此指令將會把檔案中第一行之外的全數清除。
grep -r -I -l $’^\xEF\xBB\xBF’ /path | xargs sed -i ‘s/^\xEF\xBB\xBF//;q’
可用以下指令嘗試之:
grep -r -I -l $’^\xEF\xBB\xBF’ /path | xargs sed -i ‘s/^\xEF\xBB\xBF//g’