UTF-8 是一種可變寬度的 Unicode 編碼,它會將每個 Unicode 純量值對應到一至四個 8 位元位元組的序列,其中 ASCII 碼點保持為單一未變更的位元組,而大多數表情符號等輔助字元則需要四位元組。線上 UTF-8 轉換器是一種基於瀏覽器的工具,可將 Unicode 文字編碼成以十六進位、十進位或 8 位元二進位表示法顯示的 UTF-8 位元組,或將這些表示法之一解碼回 Unicode 文字。一個值得信賴的線上 UTF-8 轉換器的決定性特質在於強制解碼(fatal decoding),意即格式錯誤的輸入會以明確的錯誤訊息遭到拒絕,而非默默替換為 U+FFFD 替換字元。這項區別至關重要,因為看似可讀的轉換結果,可能在位元組遭截斷、被重新解讀為 Windows-1252 等舊式編碼,或包含超長序列(overlong sequence)時,掩蓋了真實的損壞情況。一個實用的轉換器也支援無損往返(lossless round trip),即先編碼再解碼回完全相同的字元序列,並將所有操作保留在當前的瀏覽器分頁內,使輸入永遠不會離開使用者的機器。

utf8 converter online
線上 UTF-8 轉換器:編碼、解碼與驗證位元組

線上 UTF-8 轉換器實際上在做什麼

線上 UTF-8 轉換器的核心功能執行下列兩個方向之一:將 Unicode 字串編碼為遵循 RFC 3629 規則的位元組序列,或將已知為 UTF-8 的位元組序列解碼回字元。兩個方向中的位元組本身相同;改變的是螢幕上顯示的表示方式以及輸入的解析方式。編碼接受純 Unicode 文字,包括表情符號、帶腔調字母及 CJK 字元,並產生位元組陣列。解碼接受該位元組陣列的表示法,並產生 Unicode 文字。由於 UTF-8 是網路與現代 API 中主流的編碼,這種往返在檢查 HTTP 回應、JSON 承載、檔案標頭或資料匯出時經常發生。

此 UTF-8 編碼/解碼器使用瀏覽器標準的 TextEncoder 與強制 TextDecoder 在本機執行轉換,因此超長序列、截斷的位元組、孤立的接續位元組、代理值(surrogate values),以及 U+10FFFF 以上的碼點皆會以可見的錯誤失敗。它也會在編碼前檢查未配對的 UTF-16 代理碼元,因此包含格式錯誤片段的輸入 JavaScript 字串不會默默轉變為 U+FFFD。該工具不會進行正規化、跳脫、翻譯或自動偵測其他編碼,且不會將任何資料傳送至伺服器。

選擇正確的表示法:十六進位、十進位或二進位

十六進位、十進位與 8 位元二進位是同一組 UTF-8 位元組陣列的三種顯示表示法。它們之間沒有哪一種比另一種「更正確」;選擇取決於輸出讀者所需的用途。十六進位自然地以每個位元組兩個字元分組,並符合偵錯工具、十六進位傾印工具及大多數 API 文件所使用的格式。十進位對於以十進位思考的人類而言最易讀,在向較不具技術背景的受眾解釋位元組值時很常見。二進位則讓每個位元組的實際位元模式清晰可見,這在教學或驗證 UTF-8 的前導位元組與接續位元組結構時非常有用。

表示法每個位元組的輸出格式解碼輸入規則典型使用情境
十六進位以空格分隔的大寫兩位數位元組,例如 E2 82 AC以空格或逗號分隔的一位或兩位數位元組符記,可選 0x 前綴,或一組連續偶數長度字串檢查承載內容並一目了然地讀取位元組值
十進位以空格分隔的 0 至 255 整數值,例如 226 130 172僅限整數符記向非程式設計師及在教學素材中解釋位元組值
二進位每個位元組恰好八個 0 或 1 字元,例如 11100010 10000010 10101100僅由 0 與 1 組成的八個字元符記驗證 UTF-8 的前導與接續位元模式

由於底層的位元組並未改變,在像 UTF-8 編碼/解碼器 這樣的轉換器上切換表示法,應會產生逐位元組等效的序列。若同一輸入的兩種表示法結果不一致,則輸入本身並非原先所預期的內容。

三步驟轉換文字或位元組

  1. 選擇方向:文字轉 UTF-8 位元組,或 UTF-8 位元組轉文字,接著選擇十六進位、十進位或二進位表示法。
  2. 在文字方向輸入 Unicode 文字,或在位元組方向貼上嚴格格式化的位元組符記(以空格或逗號分隔,可選 0x 前綴,或一組連續偶數長度的十六進位字串),然後執行轉換。
  3. 將輸出結果與來源格式逐字比較,並在替換任何原始資料前,藉由將結果轉回來驗證一次往返。

步驟二的嚴格性正是無損線上轉換器與掩蓋損壞情況的轉換器之間的分野。具有奇數位數的連續十六進位字串無法構成完整的位元組,因此轉換器必須拒絕它而非猜測。同理,少於八個字元的二進位符記不構成位元組,而十進位值高於 255 也不可能出現於 UTF-8 中。將這些情況視為錯誤予以拒絕,而非寬容地略過,正是強制解碼原則套用於輸入表示法本身的展現。

UTF-8 邊界與已知位元組模式

UTF-8 在 U+007F、U+0080、U+07FF、U+0800 及 U+FFFF 處具有明確的位元組長度邊界,並在 U+10FFFF 設有最終上限。ASCII 碼點(含 U+007F 本身)以原始值容納於單一位元組中,因此貨幣符號 U+0024 編碼為 24,而字母 A 編碼為 41。超過 U+007F 後,前導與接續位元組結構接管工作,下表所列的知名錨點與 Unicode 標準及 RFC 3629 的規範完全一致。

碼點字元UTF-8 十六進位位元組位元組數
U+0024貨幣符號 ($)241
U+0041拉丁字母 A411
U+007FDELETE 邊界7F1
U+00A2分幣符號 (¢)C2 A22
U+08003 位元組邊界E0 A0 803
U+20AC歐元符號 (€)E2 82 AC3
U+1F600露齒笑臉 (😀)F0 9F 98 804
U+10FFFF最大純量值F4 8F BF BF4

這些模式適合作為測試素材。確認線上 UTF-8 轉換器是否正確連接的可靠方法,是在兩個方向貼上其中幾個錨點,然後檢查輸出是否與上表完全吻合。若 € 得到的結果不是 E2 82 AC,則該轉換器未遵循 RFC 3629,不應予以信任。

實例演練:編碼歐元符號 €

以歐元符號 U+20AC 為例,它是 3 位元組 UTF-8 序列的標準範例。其十進位值為 8364,二進位形式為 10000010101100,一個 14 位元數字。UTF-8 為 U+0800 至 U+FFFF 的值配置三個位元組,使用範本 1110xxxx 10xxxxxx 10xxxxxx,留下 16 位元供承載內容使用。將 8364 的 14 個位元填入低 16 個位置(前面補零),得到 0010 000010 101100,並依三個位元組範本拆分為 0010、000010 及 101100。填入範本後產生 11100010 10000010 10101100,將每個位元組轉換為十六進位即得 E2、82 與 AC。此線上工具回報相同的序列:十六進位為 E2 82 AC,十進位為 226 130 172,二進位為 11100010 10000010 10101100。將這三個位元組解碼回來必須正好得到 €;若結果不符,則轉換器的問題出在結構層級而非表示法層級。

驗證無損往返

往返檢查是任何線上 UTF-8 轉換器最便宜也最強大的測試。編碼一小段至少包含一個 ASCII 字元、一個非 ASCII 拉丁字元、一個 CJK 或帶腔調字元,以及一個表情符號的文字。複製產生的位元組序列,切換表示法以確認位元組在各檢視間相符,然後將位元組解碼回文字,並逐字元與原始內容比對。該工具回報的位元組數應等於所產生的 UTF-8 位元組數,解碼後的字元數也應與原始字元數相符。當所有檢查皆一致時,該轉換器在同類輸入上即可信賴;若有任一項失敗,則不應將其視為唯一真理來源。相同的習慣亦應分別套用於編碼與解碼,因為一個工具可能在一個方向正確,而在另一方向存在微妙的錯誤。UTF-8 瀏覽器工具往返驗證指南 等資源對此模式有更深入的說明。

限制與常見陷阱

此 UTF-8 編碼/解碼器將輸入上限設為文字 200,000 個 UTF-16 碼元,以及解碼表示法 200,000 個位元組。該上限使記憶體、符記解析、輸出渲染與介面運作皆保留在單一分頁內,並防止大量貼上的內容意外造成凍結。超出此規模的內容應交由串流檔案工具處理,而非線上轉換器,因為本頁面是為互動式檢查而非批次轉換而設計。它也不會自動偵測 Windows-1252、Shift JIS、GBK 或 ISO-8859 系列等舊式編碼。若位元組序列解碼失敗,正確的下一步是識別原始編碼,而非繼續強行將位元組套用 UTF-8 期待比對成功。強行套用的常見症狀包括:歐元符號顯示為三個字元、帶腔調字母變成 é 式的亂碼(mojibake),或轉換器在原本真實位元組所在之處悄悄輸出 U+FFFD 替換字元。強制解碼器會將這些症狀以錯誤形式呈現,而非表現為看似合理的文字。

When to Use a Different Tool

An online UTF-8 converter is the right tool when the input fits comfortably in a tab, the goal is verification or inspection, and the output should stay human-readable as hex, decimal, or binary. It is the wrong tool for files, archives, or anything larger than the 200,000-unit cap. It is also the wrong tool for byte representations that are not UTF-8: Base64, URL percent encoding, HTML entities, and Unicode escape sequences each map bytes or code points to text in a different way, and they need their own dedicated converters. When the task is to convert a legacy code page into UTF-8 for archival, identify the original encoding first and use a file-based converter rather than an interactive online form. For interactive, byte-exact UTF-8 work that must stay local and must fail loudly on bad input, the UTF-8 Encoder / Decoder covers text-to-bytes and bytes-to-text in a single place, and the Unicode 17.0 core specification documents the scalar ranges and encoding forms that the tool is built around.

If you're weighing options, Base100 Encode on Android: A Mobile Browser Walkthrough covers this in detail.