跳至主要內容
Lizely

BOM 移除

移除貼入解碼文字中僅一個前導的 U+FEFF,並在本機保留每一個內部、尾部或第二個前匯出現的內容。

隱私權:你的檔案不會離開裝置,所有處理均在瀏覽器本機完成。

使用方式

  1. 1.貼入已經解碼的文字,包含若有則包含不可見的前導 U+FEFF。
  2. 2.執行移除操作並檢視狀態,以確認是否僅移除了恰好一個前導 U+FEFF。
  3. 3.請完整檢視輸出內容,包括換行符和任何有意的後續 U+FEFF 內容,然後進行本機複製。

關於BOM 移除

BOM 移除是一種刻意範圍極窄的文字工具。它會檢查貼入的 JavaScript 字串的第一個 UTF-16 字元是否為 U+FEFF。若是,則僅移除該一個字元;若非,輸出則與輸入完全相同。所有處理與複製皆發生於當前瀏覽器標籤頁內,且文字不會上傳至 Lizely 或傳送至外部服務。

U+FEFF 是與位元組順序標記相關的 Unicode 字元。在解碼文字流的開頭,它可能代表一種編碼簽名。UTF-8 的位元組簽名為 EF BB BF,而 UTF-16 與 UTF-32 則有其各自的位元組簽名。此介面不會檢視任何這些原始位元組。瀏覽器的 textarea 已經包含已解碼的字元,因此該工具僅能判斷輸出字串是否以 U+FEFF 字元開頭。它無法辨識原始檔案的編碼、位元組順序、解碼行為,或來源檔案是否曾包含特定的位元組序列。

位置是整個規則。實作並未呼叫 trim、trimStart、replaceAll 或全域正規表示式。字串中間出現的 U+FEFF 會被保留,行尾換行後的 U+FEFF 也會保留,尾部的 U+FEFF 亦會保留。Unicode 指南說明,非首出現的 U+FEFF 以往具有零寬度不破斷空格語義,屬於內容的一部分,即使新文字建議使用 U+2060 WORD JOINER。若移除所有出現則將造成破壞。

針對開頭連續出現的兩個 U+FEFF 字元,有故意處理。Unicode 將第一個視為可能的簽名,第二個則視為初始內容字元,當必須表示首個零寬度不破斷空格時。BOM 移除會移除第一個字元,並將第二個留於輸出的開頭。若再次執行此工具,將移除現在位於開頭的第二個 U+FEFF,因此建議操作前先確認狀態。單次點選絕不會移除超過一個字元。

空輸入為有效的無變更情況。僅含一個前導 U+FEFF 的輸入會產生有效的空輸出。即使輸出為空,結果面板仍會顯示,因此無法將無視覺字元與操作失敗混淆。摘要會說明是否移除了前導 U+FEFF,或未發現前導 U+FEFF,並報告輸出的完整長度(以 UTF-16 字元為單位)。

所有剩餘文字皆透過精確切片操作複製。CRLF 與 LF 換行、製表符、NUL、表情符號、組合標記、代理對、非拉丁文字、空白字元,以及後續的 U+FEFF 出現,皆不會被標準化或過濾。瀏覽器可能在 textarea 中視覺上對某些不可見字元進行標準化顯示,但由邏輯產生的 JavaScript 字串,僅為原始字串減去最多其開頭的 U+FEFF 字元。此非一般不可見字元清理工具,亦非 Unicode 標準化、空白字元修剪或編碼修復服務。

輸入內容最多可含 200,000 UTF-16 字元,輸出則有獨立的 200,000 字元限制。輸入恰好達到限制時會被接受,下一字元將在處理前被拒絕。輸出驗證會接受完全邊界,拒絕邊界加一的情況。不會有任何縮短、抽樣、部分回傳或靜默阻止行為,亦無 HTML maxLength 的隱性限制。由於此轉換僅移除零個或一個字元,合法的生產輸入在處理過程中不會擴張;獨立的輸出檢查仍為明確的不變性與可執行的測試邊界。

編輯或清除輸入內容時,會立即清除先前的輸出、錯誤訊息、摘要、移除標記、複製提示以及待複製計時器。超過限制的錯誤不會讓舊的正確結果繼續顯示。剪貼簿存取為非同步操作,因此每次複製都會產生一個產生識別碼。編輯、清除、重試或解除安裝都會使該產生識別碼失效。遲到的剪貼簿權限回應無法恢復過期的「已複製」狀態,而拒絕請求則會讓完整隻讀輸出可供手動選擇。

若經可信的解碼器或編輯器揭露了會干擾解析、比較、shebang、欄位名稱或其他首個字元的前導 U+FEFF,請在之後使用 BOM 移除工具。請勿用於推斷檔案編碼、轉換 UTF-16 位元組、驗證 UTF-8、修復 mojibake、移除任意零寬度字元,或從合併的檔案中移除所有類似 BOM 的字元。若你控制檔案載入流程,應選擇具備適當 BOM 政策的解碼器;若你在此處貼入文字,請先確認前導 U+FEFF 真的是不想要的,再將結果複製到原始內容上。

方法與來源

接受已解碼的字元序列至 200,000 UTF-16 編碼單位,包括空字串。僅測試 input.charCodeAt(0) 是否符合十六進位 FEFF。若符合,則返回 input.slice(1);否則返回原始字串。永遠不要修剪、正規化、掃描或全域取代後續內容。驗證輸出總長度是否在 200,000 編碼單位以下,並返回一個獨立的移除布林值以及輸入與輸出長度。每次編輯或清除動作時,皆需清除結果、錯誤、移除狀態以及非同步剪貼簿狀態。剪貼簿完成與其計時器需透過版本與掛載狀態進行保護。可執行測試涵蓋開頭、不存在、內部、結尾、重複開頭、僅 BOM、空、CRLF、CRLF 後、表情符號與重音文字、多個內部位置,以及精確與多一的輸入與輸出預算。

常見問題

這會移除所有 BOM 或零寬度字元嗎?
不會。它最多僅移除一個 U+FEFF,且僅限於字串位置零。內部、尾部及第二個前導 U+FEFF 字元將保持不變,其他不可見字元則超出範疇。
它能判斷檔案是否為 UTF-8、UTF-16 或 UTF-32 嗎?
不會。貼入的文字區域內容已經解碼。此工具僅看到字元,而非原始的 EF BB BF、FE FF、FF FE 或其他原始位元組簽名。
當前匯出現兩個 U+FEFF 時會怎麼辦?
僅移除第一個。第二個會保留在輸出的開頭,因為 Unicode 允許它用來表示 BOM 後的初始內容。
為何空輸出仍會顯示為結果?
僅由一個 U+FEFF 組成的文字正確地會變成空值。結果面板與摘要會區分這項成功的轉換與缺失或失敗的結果。

開發者工具 使用指南

查看全部