「文字轉十六進位」會把文字中的每個字元轉成一組十六進位數字,代表其底層的 UTF-8 位元組,因此字母 "A" 會變成 41,表情符號 😀 會變成 f09f9880。每個位元組一律使用剛好兩個字元(數字 0–9 與字母 a–f),各組兩兩相接,讓解碼器能直接以位元組形式讀回。對初學者來說,通常會同時看到兩樣東西:一長串字母與數字,以及產生這些字串的格式名稱(連續、以空格分隔,或加上 0x 前綴)。兩者都是同一組位元組的誠實表示,差別只在排版方式。文字轉十六進位工具會在您的瀏覽器中執行 TextEncoder API,因此您的輸入從未離開該分頁,既沒有上傳,沒有帳號,也不會偷偷改寫。它還會回報產生了多少 UTF-8 位元組,並在編碼前若有孤立的代理碼位被替換為 U+FFFD 時提出警告。一旦您了解位元組數量與輸入字元之間的關係,後續流程就只是挑選格式並複製結果。

text to hex for beginners
給初學者的文字轉十六進位:以白話逐步解說

「文字轉十六進位」究竟是什麼意思

十六進位是一種以 16 為基底的進位系統,使用數字 0 到 9 以及字母 a 到 f(或 A 到 F)來表示 0 到 15 的數值。其中兩個字元組合在一起,可涵蓋一個位元組,代表 00 到 ff(十進位 0 到 255)的值。當您將文字編碼為十六進位時,文字本身並沒有改變;您只是把電腦在 UTF-8 之下儲存該文字所使用的位元組數值,以人類可讀、方便複製貼上的方式寫出來。

對初學者來說,最實用的思考模型是:每個字元都有一個 Unicode 碼位(例如 "A" 是 U+0041),而該碼位在 UTF-8 下會被編碼為一至四個特定的位元組。十六進位輸出就只是把這些位元組一次兩個數字地印出來。因為每個位元組永遠剛好是兩個字元,所以您可以用連續格式的輸出長度除以二,還原出位元組數量。

UTF-8 如何決定輸出長度

一個字元佔用幾個位元組,取決於它落在哪一個 Unicode 範圍。ASCII 最便宜,表情符號與罕見文字則最昂貴。初學者通常不需要記住完整規則,但只要看過一次分類,那串十六進位字串就不再顯得毫無道理。

字元類型 位元組數 範例 十六進位位元組
純 ASCII 字母或數字 1 U+0041 "A" 41
常見帶腔調的拉丁字母 2 U+00E9 "é" c3a9
大多數 BMP 字元(中文、韓文等) 3 U+4F60 "你" e4bda0
輔助平面字元(表情符號、罕見文字) 4 U+1F600 "😀" f09f9880

您可以自由混搭。片語 "Hi 😀" 包含一個 ASCII 字母(一個位元組)、一個 ASCII 字母(一個位元組)、一個 ASCII 空格(一個位元組),以及一個表情符號(四個位元組),總共是七個位元組。若您在連續格式中數到 14 個十六進位字元,表示計算一致。工具會回報精確的位元組數,您不必親手運算。

顯示同一組位元組的三種方式

「文字轉十六進位」工具提供三種輸出排版,以及兩種字母大小寫。底層的位元組從不改變,只有螢幕上的呈現方式不同。

格式 範例(位元組 48、69) 適用情境
連續配對 4869 精簡的除錯紀錄、單行輸出
以空格分隔的配對 48 69 用肉眼逐位元組讀取,常見於教學
加上 0x 前綴的詞元 0x48 0x69 C、C++、Rust 等程式碼情境

大小寫設定只影響字母 a 到 f;數字 0 到 9 保持不變,前綴中的小寫 "x" 也維持小寫。切換格式或大小寫絕不會改變編碼後的 UTF-8 位元組,但會改變格式化後的輸出長度,當您逼近工具的輸出上限時,這一點就很重要。

在瀏覽器中完成您的第一次文字轉十六進位

在任何現代瀏覽器中開啟「文字轉十六進位」工具。一切都在本機透過 TextEncoder API 執行,因此不會上傳任何資料。

  1. 將您的文字貼上或輸入到輸入欄位。您可以包含 Unicode、空白字元、輸入欄位可容納的 NUL 位元組,以及表情符號;編碼器會將它們全部視為資料。
  2. 選擇輸出格式:像 4869 的連續配對、像 48 69 的以空格分隔配對,或像 0x48 0x69 的 0x 前綴詞元。
  3. 選擇小寫(a–f)或大寫(A–F)十六進位數字。
  4. 點擊「編碼」。工具會先計算孤立的代理碼位,再將整個字串編碼成 UTF-8 位元組,接著計算格式化後的長度,最後才產出結果。
  5. 在結果面板中檢視位元組數以及任何替換警告。若工具將孤立的代理碼位替換為 U+FFFD,警告會告訴您發生了幾次替換,且對應的位元組位置為 EF BF BD。
  6. 使用「複製」按鈕複製完整的十六進位字串,或在剪貼簿存取被封鎖時手動選取。

若輸入超過一百萬個 UTF-16 碼位的上限,或格式化後的輸出會超出 4,999,999 個碼位的上限,工具會以清楚的訊息拒絕編碼,而不是默默截斷位元組、丟掉結尾、切換到更緊湊的格式,或抽樣內容。

讀懂位元組數、替換警告與複製行為

結果面板會顯示三項資訊,初學者應知道如何解讀。

  • UTF-8 位元組數是編碼器實際產生的位元組總數。將連續十六進位字串的長度除以二,理論上會得到相同的數字。
  • 孤立代理替換只有在輸入含有未配對的高位或低位代理時才會是非零值。JavaScript 字串採用 UTF-16,因此代理對(兩個碼位成對)是正常情況,會產生一個四位元組的輔助平面字元;若是孤立的碼位,則會在編碼前被替換為 U+FFFD(EF BF BD),警告會精確告訴您發生了幾次替換。
  • 複製狀態反映最近一次的嘗試結果。若剪貼簿寫入被拒絕,完整且唯讀的結果仍會留在面板中,供您手動選取。

編輯文字、切換格式或大小寫,或是開始一次新的編碼,都會清掉先前的輸出、錯誤、位元組數、替換警告與複製狀態,避免舊數字洩漏到新的編碼中。

初學者常見的邊界情況:NUL、空白、BOM 與表情符號

有少數輸入會讓第一次使用的使用者感到意外。事先了解可省下日後除錯的時間。

NUL 位元組。U+0000 是一個普通字元,會被編碼為位元組 00,在十六進位輸出中以兩個字元的配對 "00" 呈現,與其他位元組無異。工具不會把 NUL 當作結束符號。

空白字元。空格、Tab、換行(LF)與歸位(CR)會依照它們在輸入中出現的順序進行編碼。工具不會修剪、統一換行格式,或折疊空白。

UTF-8 BOM 行為。TextEncoder 並不會自動加上 UTF-8 位元組順序記號。若您的輸入本身以 U+FEFF 字元(「零寬度不中斷空格」或 BOM)開頭,編碼器會將其視為資料,並產生位元組 EF BB BF。若您需要透過對應的「十六進位轉文字」工具完整往返,請不要在來源文字中放入 U+FEFF;該解碼器的設計會消耗前導 BOM,而不是將其當成一般字元保留。

表情符號與輔助平面字元。像 😀 這類表情符號位於基本多文種平面之外,因此在格式正確的輸入中會編碼為四個位元組。若您在輸出中看到 "f09f9880",那就是一個表情符號,而不是三個拉丁字母。

組合標記與預先組合形式。編碼器不會套用 Unicode 正規化。預先組合的 "é"(U+00E9)會變成 c3a9,而分解式的 "e" + U+0301 則會保持 65 cc 81。若您的下游程式碼只接受其中一種形式,請在輸入時就提供該形式。

下一步該往哪裡走

當您能讀懂位元組數並挑選格式之後,就可以開始把輸出用於實際工作:除錯字元編碼問題、在日誌檔中手動檢查 UTF-8 位元組序列,或產生測試向量。一個實用的下一步,是到 「文字轉十六進位速查表:UTF-8 數值與格式參考」中把相同的字元範圍並列比較;若您想看 ASCII、帶腔調字元與表情符號的具體輸出範例,可以參考 「文字轉十六進位範例:UTF-8 位元組在實務中的樣貌」中的逐步演練。

若您想了解編碼器本身背後的正式規則,可以參考 WHATWG Encoding Standard,該標準定義了本工具所依賴的 UTF-8 編碼器與 TextEncoder encode 方法;而 MDN 也記錄了相同的瀏覽器 API 介面。