在公司做項目的時候,經常要把在電腦上開發的程序拷貝到嵌入式平板里進行編譯並且運行(是的,公司開發出來的辣雞平板竟然沒有交叉編譯工具鏈……),然鵝,在平板里打開程序一看,怎么文件頭出現了幾個亂碼,打算先不管,結果編譯的時候一堆錯誤,沒辦法,刪唄。然后就開啟沙雕般的操作,一個一個地找,一個一個刪,費了半天時間,終於改完。喝杯水冷靜一下,看看文件頭的代碼是何方神聖。不查不知道,一查嚇一跳,這特么原來是BOM……吐血,智障一般的設計,然而更智障的是平板系統里的編譯器竟然無法自動忽略(這東西不屬於代碼的一部分……)。不過好在這個東西是固定的,那就讓我在linux的命令行里施展點“魔法”,讓BOM全部滾蛋。
首先來了解一下什么是BOM。BOM是用來判斷文本文件是屬於哪一種Unicode編碼的標記,其本身是一個Unicode字符,位於文本文件頭部,不同的Unicode編碼會對應不同的字節,例如
FE FF 對應 UTF16BE
FF FE 對應 UTF16LE
EF BB BF對應 UTF8
既然要把他們揪出來,則需要用到神器grep(nice,我愛linux),接下來就是一頓猛如虎的操作了,先查找,再刪除(其實應該是用空格替換?)
grep -r -i -l $'^\xEF\xBB\xBF' . | xargs sed -i 's/^\xEF\xBB\xBF//g'
或者不需要遞歸目錄
grep -i -l $'^\xEF\xBB\xBF' . | xargs sed -i 's/^\xEF\xBB\xBF//g'
這個處理起來就很舒服了,可以安心的編譯了