十六進位文字批次轉換是指解析貼上的整批十六進位元組,並將完整序列解碼為嚴格的 UTF-8,且不會悄悄替換格式錯誤的資料。十六進位轉文字轉換器可處理單一且連續的偶數長度群組、由空白分隔的多個群組,或逐位元組的精確 0xNN 代號,因此「批次」是指整批貼上的輸入,而不是承諾猜測程式設計師運算式的結構。解析前,原始輸入會依 2,000,000 個 UTF-16 程式碼單元的上限進行檢查。解析後,但在配置輸出陣列之前,位元組數不得超過 1,000,000,且解碼後的文字也必須維持在 1,000,000 個 UTF-16 程式碼單元以內。所有解析、解碼、顯示與剪貼簿準備作業都會在目前的瀏覽器分頁中於本機完成;來源位元組與解碼後的字元不會上傳至 Lizely。這種組合適用於從記錄、API 內容、組態值或資料匯出檔複製而來,且其十六進位表示已足夠乾淨、可套用其中一種可接受語法的批次。它不接受完整記憶體傾印、逗號、標籤,或混合使用純十六進位與帶前置代號的表示法。

準備單一且乾淨的 UTF-8 位元組序列
十六進位是位元組值的表示法,並非文字編碼的聲明。解碼批次前,請先確認它代表的是 UTF-8。ASCII 位元組符合 UTF-8,但帶重音的字元、CJK 字元與表情符號都仰賴完整的多位元組序列。轉換器特意不猜測 Windows-1252、ISO-8859-1、UTF-16、Shift_JIS 或其他舊式編碼,因為錯誤的猜測可能改變文字的意思。
- 保留來源批次。檢查其表示法時,保留原始位元組,以免格式問題變成資料問題。
- 全程使用同一種表示法。不要將純十六進位群組與 0xNN 代號混合使用。
- 從格式化傾印內容中擷取位元組。位址、位移、ASCII 欄、註解與單位標籤都不屬於可接受的輸入語法。
- 先使用相符的來源格式。Base64 傳輸資料與二進位表示法必須先另行轉換,才能視為十六進位位元組值。
符合轉換器的精確語法
解析器的適用範圍刻意比任意的程式設計師運算式更受限。它接受以下三種形式之一的完整位元組序列:
| 輸入形式 | 可接受範例 | 必要規則 |
|---|---|---|
| 連續純十六進位 | 48656c6c6f | 每個不間斷群組都必須包含偶數個十六進位數字。 |
| 以空白分隔的純十六進位 | 48 65 6c 6c 6f | 啟用 ASCII 空白分隔符,並讓每個個別群組都保持偶數長度。 |
| 帶前置代號的位元組代號 | 0x48 0x65 0x6c 0x6c 0x6f | 啟用前置代號與 ASCII 空白;每個代號都必須精確為 0xNN。 |
啟用後,唯一允許的分隔符為 ASCII 空格、水平 tab、換行、換頁與 carriage return。純十六進位群組可以包含數個位元組,因此啟用空白分隔時,4869 與 48 69 都有效。分隔符絕不會修正不完整的半位元:4 8 會被拒絕,而不會悄悄變成 48。其他 Unicode 空白字元,包括不間斷空格,都會被拒絕。原始輸入不會經過修剪或正規化;啟用時,原本有效的內容前後可以有 ASCII 空白,但只有空白的輸入仍是錯誤。大寫與小寫十六進位數字會產生相同的位元組值。
帶前置代號的表示法是獨立模式。如果出現任何不區分大小寫的 0x 前置代號,每個代號都必須精確為 0xNN,並使用已啟用的 ASCII 空白。純十六進位與帶前置代號的形式不能混合,因此 0x41 42 會失敗。串接代號(例如 0x410x42)、三位數代號(例如 0x041)、單一半位元代號、代號之間的逗號,以及單獨的 0x 也都會失敗。如果停用空白分隔,帶前置代號的模式會精確接受一個 0xNN 代號,因為沒有可用的代號分隔符。停用前置代號時,帶前置代號的輸入會被拒絕,而不會在未告知的情況下移除前置代號。
轉換貼上的批次
- 貼上完整的十六進位批次。使用連續的偶數長度群組、由已啟用的 ASCII 空白分隔的純十六進位群組,或精確的 0xNN 位元組代號。
- 設定語法控制項,使其符合每個代號。依來源啟用或停用一般 ASCII 空白分隔符與 0x 前置代號,且不要混用不同表示法。
- 開始解碼。工具會解析完整的十六進位序列、計算其位元組數、配置位元組,並呼叫嚴格的 UTF-8 解碼。
- 從來源修正回報的錯誤。處理奇數半位元、混合語法、無效的 UTF-8 序列或上限錯誤後,請重新解碼整批資料,而不是捨棄錯誤的結尾以取得部分輸出。
- 檢查結果與位元組數。成功解碼的文字會顯示在唯讀欄位中。位元組數描述的是已解析的輸入位元組,而非可見字元數,因此多位元組文字產生的字元數可能少於位元組數。
- 剪貼簿存取可用時,複製解碼後的文字。如果權限遭拒,有效輸出仍可選取,介面也會提供手動複製說明。
剪貼簿寫入是非同步的,並會防止過時的完成結果造成干擾。延遲取得的權限結果,不得在輸入或選項變更、啟動較新的複製作業,或元件卸載後變更介面。剪貼簿是否可用,也取決於瀏覽器與安全內容原則。編輯十六進位輸入、變更任一語法選項,或開始另一次解碼,都會清除先前的輸出、錯誤、已複製狀態與複製計時器。
檢查三項彼此獨立的上限
批次輸入在各處理階段都受到限制。
| 階段 | 精確最大值 | 檢查時機 |
|---|---|---|
| 原始輸入 | 2,000,000 個 UTF-16 程式碼單元 | 解析前;不會先修剪原始字串。 |
| 已解析的位元組序列 | 1,000,000 個位元組 | 配置位元組輸出陣列前。 |
| 解碼後的文字 | 1,000,000 個 UTF-16 程式碼單元 | 完整且有效的 UTF-8 序列解碼後。 |
每個精確最大值都獲接受。只要比適用最大值多出 1 個程式碼單元或位元組,就會因錯誤而被拒絕;錯誤訊息會指出沒有任何內容遭到解碼、傳回或截斷。轉換器絕不會切割過大的來源、忽略額外的完整位元組、抽樣文字,或套用無聲上限。帶前置代號的表示法每個位元組所需的來源字元比連續純十六進位更多,因此帶前置代號的批次可能在達到位元組上限前,就先觸及原始輸入上限;這是預期結果,並非解析器故障。
診斷語法與 UTF-8 失敗
解析器邊界與格式
在純十六進位模式下,每個群組只能包含 0–9、A–F 或 a–f,而且數字個數必須為偶數。逗號、破折號、冒號、括號、逸出標記、註解、單位標籤與非十六進位字母都會造成錯誤,而不是可忽略的裝飾。諸如 486 這種奇數長度群組會被拒絕,而啟用空白也不代表可以將不同的奇數長度群組合併成一個位元組。對於帶前置代號的輸入,請將每個代號與精確的 0xNN 結構核對,並確保所有代號遵循相同模式。請修正原始來源,而不是要求工具自動改寫。
無效的 UTF-8 位元組序列
嚴格的十六進位解析並不保證所得位元組構成有效的 UTF-8。解析後,完整位元組陣列會在啟用致命錯誤處理的情況下傳給瀏覽器的 TextDecoder。寬鬆的解碼器可能會為損壞的位元組插入 U+FFFD,但此轉換器會改為回傳錯誤,且不提供部分輸出。失敗情況包括多餘的後續位元組、遭截斷的多位元組序列、超長編碼、代理程式碼點的 UTF-8 編碼,以及高於 U+10FFFF 的值。當後續序列失敗時,絕不會傳回有效前綴,也不會悄悄捨棄錯誤結尾。這些邊界遵循 RFC 3629 對 UTF-8 的定義,以及 MDN TextDecoder 建構函式參考資料所述的瀏覽器解碼模型。
考量 BOM、NUL 與空白輸出
開頭的 UTF-8 位元組順序記號 EF BB BF,會依標準 TextDecoder 包裝器的預設行為被消耗。因此,EF BB BF 41 會傳回 A,而不會將 BOM 顯示為文字的一部分。相同的位元組序列位於輸入中間時,會保留為實際的 U+FEFF 字元。單獨的 BOM 是有效的解碼結果,可見輸出為空白,因此看似空白的結果不一定代表失敗。
位元組 00 也是有效的 UTF-8 資料,並會轉變為 U+0000;它不會被視為 C 樣式字串的結尾。只有在成功解碼後的文字不包含任何 UTF-16 程式碼單元時,複製控制項才會停用。當批次僅由開頭的 BOM 組成時,這項差異很重要;含有內嵌 NUL 的文字仍然可能有效且可複製。
使用適合的工具處理批次十六進位作業
此轉換器不會解譯整數常值、反轉位元組順序、移除 NUL 位元組、評估逸出序列、解析含位址的十六進位傾印、解密資料,或執行解碼後的內容。對於逐字表示的 0 與 1 位元組輸入,請使用二進位轉文字轉換器。對於 Base64 傳輸資料,請先使用 Base64 編碼/解碼工具。對於格式化的記憶體傾印,請透過適當且值得信任的工作流程,只擷取其中的位元組欄,而不是提交整個顯示內容。因此,可靠的批次應包含一種已知編碼、一致的表示法,以及目標文字所需的每個位元組。