从文件中删除多个BOM

时间:2012-02-01 17:54:26

标签: unicode byte-order-mark

我使用的是一个Javascript文件,它是其他JavaScript文件的串联。

不幸的是,将这些JavaScript文件连接在一起的人在读取文件时没有使用正确的编码,并允许每个JavaScript文件的BOM都写入连接的JavaScript文件。

有没有人知道搜索连接文件并删除任何/所有BOM标记的简单方法?

使用PHP或Mac OSX的bash脚本会很棒。

5 个答案:

答案 0 :(得分:17)

另请参阅:Using awk to remove the Byte-order mark

要从文本文件中的任何位置删除多个BOM,您可以尝试类似的操作。只需省略^锚:

perl -e 's/\xef\xbb\xbf//;' -pi~ file.js

(这会就地编辑文件。但是会创建一个备份file.js~。)

答案 1 :(得分:15)

我通常使用vim执行此操作:

vim -c "set nobomb" -c wq! myfile

答案 2 :(得分:0)

我也想出了这个完全用PHP工作的解决方案:

$packed = pack("CCC",0xef,0xbb,0xbf);
$contents = preg_replace('/'.$packed.'/','',$contents);

答案 3 :(得分:0)

获取BOM文件

grep -rIlo $’^\xEF\xBB\xBF’ ./

删除BOM文件

grep -rIlo $’^\xEF\xBB\xBF’ . | xargs sed –in-place -e ‘s/\xef\xbb\xbf//’

排除.svn目录

grep -rIlo –exclude-dir=”.svn” $’^\xEF\xBB\xBF’ . | xargs sed –in-place -e ‘s/\xef\xbb\xbf//’

答案 4 :(得分:0)

我编写了一个bash脚本,请参见here,该脚本可在Mac上运行,但尚未在其他系统上进行测试,但我怀疑它也可以在该系统上运行。该脚本还支持包含空格的文件或文件路径。

示例

从当前目录中的所有文件中删除BOM表:

rmbom .

在当前目录中打印具有BOM表的所有文件

rmbom . -a

仅从扩展名为txt或cs的当前目录中的所有文件中删除BOM表:

rmbom . -e txt -e cs

打印帮助

rmbom -h