語言:繁體中文

tools / hex

hex/

文字和十六進位(Hex)互轉。字元集可選 UTF-8、GBK、UTF-16 等,輸出可選分隔符號、大寫和 0x、\x 前綴。

文字

hex

常見問題

一個漢字轉成十六進位是幾個位元組,為什麼和其他工具的結果不一樣

取決於選用的字元集。UTF-8 下常見漢字佔 3 個位元組,例如「中」是 e4 b8 ad;GBK、GB2312 下佔 2 個位元組,「中」是 d6 d0;emoji 在 UTF-8 下佔 4 個位元組。英文字母和數字在 UTF-8、GBK 下都是 1 個位元組,結果相同。和其他工具對不上時,請先確認對方使用的字元集,本工具預設為 UTF-8。

十六進位轉文字顯示解出的位元組不是有效文字,或結果是亂碼怎麼辦

表示這串位元組不是依目前的字元集編碼的,請換一種字元集試試。中文內容最常見的是 UTF-8 和 GBK,舊軟體和資料庫匯出多半使用 GBK;UTF-16 的十六進位裡通常會有很多 00。本工具不會把解不出來的位元組硬顯示成亂碼,只有 ISO-8859-1 例外:它的每個位元組都對應一個字元,所以不會出錯,但中文會變成亂碼字元。GBK 和 GB2312 都使用瀏覽器內建的 GB18030 解碼器,比 Python、Java 寬鬆,選 GB2312 也能解出 GBK 才有的字。如果這串位元組本來就不是文字(圖片、加密資料、雜湊值),不論選哪種字元集都解不出來。

十六進位轉文字可以辨識哪些寫法

英文字母大小寫皆可。位元組之間可以用空白、換行、Tab、冒號、逗號或連字號分隔,也可以不分隔;每個位元組前可以加 0x 或 \x,0x48,0x65 和 \x48\x65 都能直接解碼。兩個分隔符號之間的位數必須是偶數,所以 0x1 要寫成 0x01;混入 0-9、a-f 以外的字元也會出錯,兩種錯誤都會指出是第幾個字元。U+4E2D、%E4%B8%AD 這類寫法無法辨識,URL 編碼請使用本站的 URL 工具。

怎麼產生 0x48,0x65 或 \x48\x65 這種格式

分隔符號選「,」、前綴選「0x」,會得到 0x48,0x65,可以放進 C、Java 的位元組陣列;分隔符號選「無」、前綴選「\x」,會得到 \x48\x65,這是 Python、C 字串裡的位元組寫法。前綴會加在每個位元組前面,所以分隔符號選「無」再加 0x 會得到 0x480x65,一般用不到。「大寫」只影響 a-f,0x 裡的 x 不會變。

UTF-16 的結果為什麼開頭多了 feff,和其他工具對不上

UTF-16 依 Java 的寫法輸出:開頭是 FE FF(位元組順序標記,BOM),後面是大端序,「中」是 fe ff 4e 2d;不帶標記的 UTF-16BE 是 4e 2d,複製後刪掉開頭兩個位元組即可。UTF-32 是大端序、沒有標記,「中」是 00 00 4e 2d。解碼時,UTF-16 可辨識以 FE FF(大端序)和 FF FE(小端序)開頭的資料,沒有標記就當作大端序。

選 ASCII 或 ISO-8859-1 時輸入中文為什麼會出錯

ASCII 只能表示 0 到 127 的字元,ISO-8859-1 只到 U+00FF(西歐帶重音符號的字母,沒有漢字)。超出範圍的字元會出現『字元「中」無法用 ASCII 編碼』的錯誤,不會像 Java 的 getBytes 那樣悄悄換成 ?。GBK 和 GB2312 也一樣,emoji 和字碼表裡沒有的罕用字會出錯,改用 UTF-8 或 GB18030 就能轉換。

輸入的空白和換行會被轉換嗎

文字轉 hex 時會。輸入框裡的每個字元都會參與轉換,包括頭尾的空白和換行:空白是 20,換行是 0a。瀏覽器的輸入框會把換行統一成 \n,所以多行文字裡的換行是 0a 而不是 0d 0a,需要 Windows 換行的話請自行在結果裡修改。反過來,hex 轉文字時 hex 裡的空白會被忽略,只有位元組本身算數;結果裡的 0d 0a 也只會顯示成一個換行。

輸入的內容會上傳嗎

不會。轉換在瀏覽器裡完成,不會發出任何請求,也不會儲存。