最後更新日期:2022 年 01 月 3 日
BOM 是 Byte Order Mark 的縮寫,中文譯為「位元組順序編號」。
在 Windows 系統中,有一些軟體 (如記事本) 會在寫入或讀取 UTF-8 的文件時,加入 BOM 或是優先去尋找文件中的 BOM 記號,如果沒有找到,就會使用 Windows 系統預設的編碼 cp950 來開啟或寫內文件檔。
但是在 Linux 系統中,這樣的特性則可能會產生一些相容性的問題。
Table of Contents
如何判斷文件是否有 BOM 記號
在 bash 中,可以輸入以下指令
grep -r $'\xef\xbb\xbf' 檔案名稱
在 vim 中,可以輸入以下指令,如果回應為「nobomb」,就是沒有 bom 記號,如果回應為「bomb」,則是有 bom 記號
:set bomb?
如何在檔案中加入 BOM 記號
在 vim 中
:set bomb
使用 Python
# 在把資料寫入檔案前,先寫入 BOM
with open('data.txt', 'wb') as f:
f.write(b'\xEF\xBB\xBF')
# 再繼續寫入其他資料
with open('data.txt', 'w', encoding='utf-8', newline='') as f:
# ...
如何移除檔案中的 BOM 記號
在 bash 中
# 方法一
# 使用 grep 找出來,再用 perl 去除
grep -rl $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'
# 方法二
# 使用 find 找出來,再用 sed 去除
find . -type f -exec sed -i 's/\xEF\xBB\xBF//' {} \;
在 vim 中
:set nobomb
參考資料
https://en.wikipedia.org/wiki/Byte_order_mark
https://zh.wikipedia.org/wiki/%E4%BD%8D%E5%85%83%E7%B5%84%E9%A0%86%E5%BA%8F%E8%A8%98%E8%99%9F
Comments