若要在瀏覽器中從解碼後的文字移除一個前導 U+FEFF 字元,請將內容貼到 BOM Remover 中,執行一次,然後把結果複製到本機;這個工具只強制執行「位置零」這一條規則,所以第二個前導 BOM 或字串內部的 BOM 都會在轉換後存活下來。《War Thunder》(戰爭雷霆)的玩家、任務編輯者以及模組作者,有時候會在記錄檔、任務腳本、自訂任務 JSON、對戰匯出檔,或是模組化的本地化檔案的開頭,遇到一個頑固的隱形字元,它會導致解析器、正則表達式比對、shebang 或欄位名稱比對出錯。這個修正方法通常並不直觀,因為 U+FEFF 沒有字形,看起來不像打錯字;它只是讓第一個位元組表現得像一個不可碰觸的字元,在普通的編輯器檢視中沒有人看得到它。一個可靠的本地端變通方法是,把檔案文字複製到一個只檢查恰好一個位置的工具中,執行轉換,然後把清理後的結果貼回原始文件。本指南說明了這個工具實際上做了什麼、它所保留內容的確切界線,以及如何在不將任何東西上傳到遠端伺服器的情況下,從你的瀏覽器中移除 War Thunder 檔案中的前導 BOM。

BOM Remover 實際上為《War Thunder》檔案做了什麼
BOM Remover 是一個刻意設計得很狹窄的文字工具,它的存在只為了做一件事:判斷貼上的 JavaScript 字串的第一個 UTF-16 程式碼單元是否為 U+FEFF。如果是,該工具會精準地移除那一個程式碼單元。如果是其他任何內容,該工具會原封不動地回傳輸入。它不做 trim、不做全域替換、不做空白字元正規化、不做編碼偵測,也不做上傳步驟,這使得當你在排查從《War Thunder》工具或社群模組流程中產生的檔案時,行為非常容易推理。
這個工具處理的是已經解碼後的文字,因為瀏覽器的 textarea 存放的是解碼後的字元,而非原始位元組。這代表這個工具無法告訴你原始檔案究竟是帶有 EF BB BF 簽名的 UTF-8、帶有 FE FF 或 FF FE 的 UTF-16,還是帶有 FF FE 00 00 的 UTF-32。它所看到的只是瀏覽器完成解碼工作後所得到的字串。位置就是唯一的規則,因此無論原始位元組是如何寫入的,同樣的轉換會以同樣的方式運作,這讓這個工具在你在 Windows、Linux 和 macOS 編輯器之間來回傳遞檔案時能保持可預測性。
如何從《War Thunder》檔案中移除前導 BOM
- 在文字編輯器中開啟 War Thunder 檔案,這個編輯器必須能讓你複製其完整內容,包括最開頭的任何隱形字元。Notepad++、VS Code,或你編輯器的「顯示隱形字元」模式,會把前導 BOM 顯示為一個微小的 U+FEFF 標記或一個問號,這正是表示該檔案實際上以 BOM 開頭、而不是以你預期的字元開頭的線索。
- 從第一個字元到最後一個字元選取整個檔案內容,然後將其複製到剪貼簿。此時不要執行尋找取代或全域 BOM 清理工具;目標是把原始的解碼後字串餵給這個工具,這樣你才能精確地稽核發生了什麼變化。
- 將複製的文字貼到 BOM Remover 在你瀏覽器中的輸入區域。這個工具最多接受 200,000 個 UTF-16 程式碼單元,因此像冗長的對戰匯出檔、大型本地化表格,或是內容豐富的社群記錄傾印,都在這個範圍之內。
- 執行移除工具並讀取狀態列。摘要會告訴你:要不就是精準地移除了恰好一個前導 U+FEFF,要不就是找不到前導 U+FEFF,並且它會以 UTF-16 程式碼單元回報結果輸出長度,讓你能確認長度變化為零或一。
- 檢閱完整的輸出,包括每一個 CRLF 或 LF 行結尾、尾端的空白字元、內部的定位字元 (tab),以及任何原本位於第一個字元之後的 U+FEFF。這些都不會被正規化或過濾,這正是當解析器對行結尾或欄位計數敏感時你所想要的行為。
- 複製清理後的輸出,並將其貼回編輯器中覆蓋原本的檔案內容。以你下游 War Thunder 工作流程所預期的編碼儲存檔案(自訂任務腳本和模組化本地化檔案通常使用不帶 BOM 的 UTF-8),然後透過你平常的流程重新載入該檔案,以確認解析器、正則表達式或欄位比對現在能夠通過。
《War Thunder》中常帶有前導 BOM 的檔案類型
《War Thunder》的官方遊戲檔案通常在發佈時是不帶 BOM 的,但只要你開始在工具之間複製內容、匯出記錄,或手動編輯模組檔案,一個前導 U+FEFF 就可能悄悄溜進來。由某些 Windows 編輯器儲存的自訂任務腳本會繼承該編輯器預設的 BOM 政策。透過 Windows 主控台或 PowerShell 流程進行重新導向的對戰匯出檔,偶爾會以 BOM 開頭,因為宿主 shell 在重新導向時加上了它。在社群翻譯者之間共享的本地化表格常常帶有 BOM,這個 BOM 來自原始貢獻者的編輯器,然後在每一位開啟並重新存檔的貢獻者之間傳遞下去。
自訂任務編輯器所用的任務 JSON,其行為與任何其他 JSON 一樣,因此單一一個前導 U+FEFF 就可能打斷一個期望第一個字元是 { 的解析器,讓它收到的是一個零寬字元。從以 Excel 為基礎的社群工具輸出的資料庫傾印、記錄匯出檔,以及 CSV 風格的設定表格,常常在位置零帶有一個 BOM,這正是為什麼這麼多第一個字元的比對會在不聲不響中失敗,即使可見文字看起來一模一樣。如果你看到的解析器錯誤、正則表達式失誤,或是欄位名稱不符的狀況,都是從某個與《War Thunder》相關的檔案的第一個字元開始,那麼前導 BOM 就是你在更動工作流程中任何其他部分之前,最該優先驗證的對象。
此工具保留什麼、變更什麼
這個轉換刻意保持極小,這樣你才能預測它對真實的《War Thunder》檔案會產生什麼效果。下方表格摘錄了 BOM Remover 在每個有記錄情境下的行為,直接取自該工具經過驗證的行為。
| 情境 | 工具行為 |
|---|---|
| 第一個字元是 U+FEFF | 精準地移除那一個程式碼單元 |
| 第一個字元是其他任何字元 | 輸出與輸入完全相同 |
| U+FEFF 出現在第一個字元之後 | 予以保留,即使它位於字串中間或緊接在換行之後 |
| 兩個連續的 U+FEFF 出現在開頭 | 第一個被移除,第二個留在輸出的開頭 |
| 輸入為空 | 有效的無變更情況,輸出為空 |
| 輸入只包含一個 U+FEFF | 輸出為空,且結果面板仍會渲染 |
| CRLF、LF、定位字元 (tab)、NUL 位元組、表情符號、組合記號、非拉丁文字 | 逐字保留,不做任何正規化或過濾 |
| 輸入超過 200,000 個 UTF-16 程式碼單元 | 在處理前即拒絕,不顯示部分結果 |
| 輸出超過 200,000 個 UTF-16 程式碼單元 | 以明確的不變性測試失敗予以拒絕 |
因為這個轉換在任何時候最多只會移除零或一個程式碼單元,一個有效的實際輸入在處理過程中不可能會膨脹。當你在檢查這個工具是否真的對你的檔案做了什麼事情時,這是一個有用的不變性:輸出長度會等於輸入長度,或等於輸入長度減一,而且絕不會介於兩者之間。內部的 U+FEFF、尾端的 U+FEFF、位於 CRLF 換行之後的 U+FEFF,以及任何第二個前導 U+FEFF,都會被保留在原位,這正是非初始位元組順序標記 (BOM) 在 Unicode 中有文件記載的處理方式。
限制與安全規則
BOM Remover 最多接受 200,000 個 UTF-16 程式碼單元的輸入,並對輸出施加同樣的硬性上限。剛好等於 200,000 個程式碼單元的輸入會被接受;再多一個程式碼單元則會在處理前被拒絕。輸出驗證會接受剛好等於上限的值,並拒絕上限加一的值,這代表成功的結果是你唯一可以複製的結果。它不會縮短、取樣或部分回傳任何內容,而這個工具也絕不會因為 HTML 屬性上限而悄悄失敗。
編輯或清除輸入會立即清除先前的輸出、錯誤、摘要、移除旗標、複製訊息,以及任何等待中的複製計時器。超過上限的錯誤不會讓舊的成功結果繼續顯示,這能保護你在重試之後不會複製到過時的資料。剪貼簿存取是非同步的,因此每一次複製都受到一個世代識別碼 (generation identifier) 的保護;延遲到的權限回應無法還原一個過時的「已複製」標記,而被拒絕的剪貼簿請求則會讓唯讀的完整輸出繼續可供手動選取。
何時應跳過 BOM Remover 並選擇其他方法
當你真正需要的是識別檔案的原始位元組編碼、將 UTF-16 位元組轉換為 UTF-8、驗證檔案是否是格式正確的 UTF-8、修復亂碼 (mojibake)、移除每一個零寬字元,或是清理一個由所有 BOM 類位元組串接而成的文件時,BOM Remover 並不是合適的工具。這個工具處理的是已經解碼後的文字,無法判斷某個檔案是否曾包含 WHATWG 編碼標準所記錄的 EF BB BF、FE FF 或 FF FE 位元組簽名。如果你能控制檔案的載入方式,請選擇帶有適當 BOM 政策的解碼器,例如任務 JSON 使用嚴格的「無 BOM」讀取器,或 CSV 匯入使用「讀取時移除」選項。如果你必須把文字貼到 BOM Remover 中,請在把結果複製回去覆蓋原始檔案之前,先確認那個前導 U+FEFF 確實不是你想要的,因為位置零的 BOM 有時候是有意義的內容。
特別就《War Thunder》的工作流程而言,這個工具最適合用在「一個值得信賴的解碼器或編輯器暴露出了一個會干擾解析器、比對、shebang 或欄位名稱檢查的前導 U+FEFF」之後。一旦檔案清理乾淨,請以你下游工具所預期的編碼儲存它,並透過你平常的流程重新載入。這樣能讓轉換保持可稽核性:點擊一次,檢查一個位置,移除一次,並得到一個你可以在本機複製的結果,過程中不用把檔案送到任何地方。
如需更深入的說明,請參閱 如何從貼上的文字中移除 Bommer 字元。