2006-03-20

BOM (Byte Order Mark)

為了處理全世界不同語系文字的顯示問題,現在很多的網頁都使用了 UTF-8 (Unicode) 的編碼,有時候當我們在收集資料,甚至只是把複製來的純文字存成 .txt,其實裡面的編碼方式不注意都不會發現。可是,同樣是一個「純文字檔」,用記事本或其他軟體開啟的時候,它們怎麼知道裡面的編碼方法呢?

這兩天弄了一個 HTML 檔下來研究(就是之前說的 TiddlyWiki),自己亂改後存檔,使用過後卻總是會有問題,去找高人指點,人家告訴我是因為有的編輯器會「自動」塞入 BOM,導致執行有問題,我第一次聽到那是什麼玩意,所以就去做了一下功課。BOM - Byte-Order Mark,它是一個兩個 Byte 的 "Mark",0xFF 0xFE (或是看到 EF BB BF),這是 Unicode 裡用來標記位文組順序的識別碼,只要軟體在開啟檔案時檔頭有這兩個 Bytes,就可以確定它是 Unicode 的檔案,即使它只是純文字檔。

問題來了,寫入這兩個 Byte 並不是強制的規定,所以有的程式中規中矩地處理檔案,不管是不是 Unicode,遇到檔案檔頭被塞 BOM 的,沒加上判斷,程式或軟體就會很困擾了。微軟相關的編輯器,只要遇到是 Unicode 的一律在檔頭塞 BOM,而我最常用的編輯器:UltraEdit,也給我來這一套,所以只要我一存檔,那個 HTML 裡面的 Javascript 就會錯亂,都是那個 BOM 害的。一般的文字編輯器根本又不提供做 Hex 的檔案編輯,打死都查不出來被塞入了什麼看不見的字元。(UltraEdit 看得到,不過討厭的是它只要知道發現是 Unicode 的檔案,顯示 Hex 的時候也會「自動補上」FF FE,除非關掉「自動偵測 UTF-8 檔案」,不然你根本不知道這兩個 Bytes 是不是真的在那邊。)

找了半天,找到怎麼讓 UltraEdit 在寫入檔案不會自作主張地塞 BOM 進去(版本 10.10 之前不知道有沒有效):

  1. 找到 uedit32.ini (通常在安裝 UltraEdit 的目錄裡,找不到就在 WINDOWS or WINNT 目錄下)
  2. 在 Section [Settings] 裡面加上兩行:
    Write UTF-8 BOM=0
    Write UTF-8 BOM NF=0
  3. 存檔,重新開啟 UltraEdit

我另一台電腦裡有裝 11.0 的版本,發現在 進階->組態->一般 的標籤裡面就能直接設定,不用再找 .ini 檔了。給有習慣親手打造網頁、或開始碰到手動處理 Unicode 檔案的人參考一下。

回應: 0

張貼留言

歡迎隨便亂哈啦留言或發表意見,不過要理性不做人身攻擊~匿名的朋友得到回應的速度會比較慢喔~
請注意發問相關的禮貌和規矩,不當留言、和本文無關的回應可能會被直接刪除無視喔!