將檔案的編碼變更為 UTF-8,代表以原本寫入位元組時所使用的編碼來解碼這些位元組,再將解碼後得到的字元重新編碼為 UTF-8。來源位元組並非就地改寫,而是先透過來源編碼被解讀為字元,接著將這些字元序列化為 UTF-8 位元組以寫入輸出檔。如果來源編碼指定錯誤,字元的意義就會改變——即使位元組本身在語法上看似合理,姓名、標點與符號仍會變成亂碼 (mojibake)。因此最乾淨的做法,是先確認檔案當初是以何種編碼產生,再以完全相同的標籤進行解碼,最後從解碼得到的 Unicode 字元輸出 UTF-8。以瀏覽器為基礎的工具可以在不上傳檔案的情況下完成這項轉換,機密資料因此保留在本機。UTF-8 Converter 正是執行這項工作:它會讀取本機檔案、預覽解碼後的字元,並輸出一個不含 BOM、可下載的成品。解碼過程中的驗證同樣重要:無效的位元組序列與截斷的多位元組序列應當明確失敗,而非被替換字元取代,因為靜默替換會產生一個開啟時不報錯、卻曲解原始文字的檔案。

change file encoding to utf-8
將檔案編碼變更為 UTF-8 並下載

「將檔案編碼變更為 UTF-8」實際上做了什麼

每一個文字檔都是一段位元組序列,外加一套將這些位元組轉為字元的慣例。UTF-8、UTF-16 little-endian、UTF-16 big-endian 與 Windows-1252 是你在真實資料中會遇到的四種此類慣例。因此變更編碼需要兩個階段:先以產生該檔案時所使用的慣例將位元組讀為字元,再以 UTF-8 將這些字元寫回。輸出檔是一組全新的位元組序列,而非僅僅翻轉檔頭的輸入副本。

由於 UTF-8 依字碼點不同,每個字元使用 1 到 4 個位元組,輸出檔的大小通常會改變。純 ASCII 輸入會與原本位元組完全相同,因為 ASCII 字元在所有與 ASCII 相容的舊式編碼及 UTF-8 中都以單一位元組表示。任何 ASCII 以外的內容——帶有變音符號的字母、西里爾字母、CJK 字元、表情符號——會變成 2、3 或 4 個 UTF-8 位元組。這種膨脹屬正常且預期,並非損壞的跡象。

為何來源編碼必須明確指定

亂碼最常見的原因不是工具損壞,而是被假設出來的來源編碼。許多位元組序列在超過一種舊式編碼下都是有效的,卻代表不同的字元。單一位元組如 0x95,在 Windows-1252 之下解碼為 U+2014 (破折號),在 ISO-8859-1 之下則為控制字元。若啟發式判斷挑錯了標籤,輸出檔將在毫無可見警告的情況下開啟,姓名、標點與符號卻會在不知不覺中改變。

正因如此,要求明確指定來源編碼的工具,比會自行猜測的工具更為安全。可稽核的轉換會記錄所採用的假設:當結果看起來有誤,便能回頭檢視該假設,並以不同的來源標籤重新轉換,而非被困在黑箱式的偵測步驟裡。UTF-8 模式更進一步,採用如 WHATWG Encoding Standard 所定義的致命驗證:無效的接續位元組、截斷的序列以及禁止的位元組範圍會造成明確的失敗,而非被替換字元取代。失敗的轉換比起悄悄損毀的轉換,遠容易偵錯。

轉換器支援的來源編碼

四種來源編碼涵蓋了你會需要轉換的絕大多數文字檔。下表整理其區分特徵。

編碼典型來源BOM 處理位元組序備註
UTF-8跨平台匯出、現代應用程式、網頁內容前導 BOM 由解碼器消化,輸出不含 BOM不適用
UTF-16 little-endianWindows 記事本「Unicode」儲存檔,許多 Windows API已辨識的 BOM (FF FE) 在輸出前去除低位元組在前;顛倒會使文字錯亂
UTF-16 big-endian部分 Unix 與 Java 匯出檔、網路通訊協定已辨識的 BOM (FE FF) 在輸出前去除高位元組在前;顛倒會使文字錯亂
Windows-1252常被誤標為 ISO-8859-1 的舊式西歐文字檔無 BOM 概念單位元組;位元組 0x80–0x9F 為可列印的標點與符號

Windows-1252 的歐元符號位元組 0x80 在正確轉換後,會成為三個 UTF-8 位元組 E2 82 AC。表情符號等輔助平面的字元會以 UTF-16 代理對編碼;有效的高位代理後接有效的低位代理,會在輸出 UTF-8 之前先組合成單一 Unicode 純量值,配對錯誤或格式不對的代理對則會解碼失敗。輸出的位元組配置詳載於 RFC 3629。

三步驟將檔案編碼變更為 UTF-8

  1. 確認真實的來源編碼。檢查產生該檔案之應用程式的儲存對話方塊、檔案中繼資料,或任何隨附說明文件。請勿依據檔案在文字編輯器中的外觀來判斷,因為猜錯標籤仍會產生可閱讀但字元已損毀的文字。
  2. 開啟 UTF-8 Converter,從選擇器中挑選對應的來源編碼,並選擇文字檔 (上限 10 MB)。瀏覽器在本機讀取位元組,以所選標籤搭配致命錯誤處理進行解碼。預覽窗格會顯示解碼後的字元,讓你在下載前能驗證姓名、標點、貨幣符號與非 ASCII 行的代表性樣本。
  3. 下載結果。檔名會附加 -utf8,內容為不含 BOM 的 UTF-8 位元組。於目標應用程式中開啟新檔案,確認特殊字元顯示正確。在端對端完整工作流程驗證完畢前,請保留原始檔案。

解讀預覽與位元組數

預覽是抓出錯誤來源編碼成本最低的地方。若檔案是由法文版 Windows 環境以 Windows-1252 儲存,卻不小心選了 UTF-16LE,預覽將在應出現變音符號字母的位置顯示錯亂字元或替換方塊。改選 Windows-1252 通常能立即看到正確的帶變音符號文字。

頁面也會顯示來源與輸出的位元組數。對大多數真實輸入而言,兩者會不同,因為 UTF-8 在非 ASCII 字元上比單位元組舊式編碼使用更多位元組。較大的輸出屬正常,單憑這點並不代表資料遺失;輸出較小才是不尋常且值得調查的狀況。預覽可能會遺漏部分控制字元與 Unicode 正規化差異,因此應將其視為快速的健全性檢查,而非完整驗證。請於實際會取用該檔案的應用程式中開啟下載檔案,並端對端測試一組已知的非 ASCII 內容樣本。

限制與何時改用其他方法

此轉換器是為瀏覽器記憶體內處理所設計,在開始讀取前會先檢查 10 MB 的檔案上限。超過此大小的檔案應改用具備明確來源與目標編碼的串流工具——例如命令列 iconv、PowerShell 的 Get-Content 與 Set-Content (搭配 Encoding 參數),或接受編碼參數的資料庫匯入/匯出工具。數 GB 級的記錄檔封存與資料庫匯出檔都屬於此類。若需要將 UTF-8 設為 Windows 文字檔的全系統預設值,可參考 這份 Windows UTF-8 指南 中的平台專屬步驟。

單一檔案若混用多種編碼,無法靠單一輪解碼修復。若某 CSV 的部分欄位以 UTF-8 儲存,其他欄位則從 Windows-1252 來源貼上,唯一可靠的修正是回到原始資料來源,在單一已知編碼下重新匯出每個片段。當檔案或來源編碼變更時,轉換器也會取消可見的結果並使先前的下載網址失效,因此較慢的過時讀取不會取代較新的選擇。被撤銷的物件網址無法取回。

核心工作流程摘要

將檔案的編碼變更為 UTF-8 是一項兩階段作業,完全取決於正確識別來源編碼。UTF-8 Converter 在本機完成此工作:明確的來源選擇、致命驗證、不含 BOM 的輸出,以及上限 10 MB 的可下載成品。對於 UTF-8、UTF-16LE、UTF-16BE 或 Windows-1252 文字檔的例行單檔轉換,這就是完整的流程。若檔案較大、來源混用多種編碼,或需批次轉換,請改用可在命令列指定來源與目標編碼的串流工具。

延伸閱讀:Base100 編碼大量文字:UTF-8 膨脹與限制。