Xxencode 編碼與 Xxdecode 解碼

用 xxencode 編碼文字、十六進位位元組或檔案,或把 xxencode 資料塊解碼還原。它的字母表只包含字母、數字、加號和減號。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 選擇「編碼」生成 xxencode 資料塊,或選擇「解碼」把資料塊還原為資料。
  2. 保留 begin 和 end 行並設定檔名可得到完整的資料塊;關閉該選項則只輸出資料行。
  3. 輸入或貼上內容,也可以開啟檔案,結果會隨輸入即時更新。
  4. 複製或下載結果。解碼時如果資料不是文字,請選擇十六進位輸出或直接下載檔案。

什麼是 xxencode?

xxencode 保留了 uuencode 的結構,只更換了字元。它同樣把每 3 個位元組拆成 4 個 6 位的值,每個資料行同樣以長度字元開頭、最多對應 45 個位元組,整個資料塊同樣位於 begin 644 檔名 行和 end 行之間。

64 個值依次對應 +、-、數字 0-9、大寫字母 A-Z 和小寫字母 a-z。長度字元也使用同一張表,因此滿 45 位元組的行以 h 開頭,end 之前的空行則是一個 +。由於格式完全相同,輸出大小也與 uuencode 一樣:算上長度字元和換行符,約比原資料大 38%。

xxencode 誕生的原因

uuencode 的結果中有大量標點符號,例如 [、]、\、^ 和 !。IBM 大型機使用 EBCDIC 而不是 ASCII,而這些字元在不同的 EBCDIC 內碼表中位置並不相同。郵件經過 ASCII 網路與 EBCDIC 網路之間的閘道器時,這些字元可能被錯誤轉換,導致檔案損壞。

字母、數字、加號和減號在所有 EBCDIC 內碼表中都是一致的,因此 xxencode 文字可以在兩種字元集之間雙向無損轉換。後來的 MIME 也採用了同樣的思路:Base64 只使用字母、數字和少數在 ASCII 與 EBCDIC 中完全相同的符號。xxencode 從未像 uuencode 那樣普及,最終兩者都被 Base64 取代。

uuencode 與 xxencode 對比

uuencodexxencode
字元ASCII 32 到 95,零值用反引號+ - 0-9 A-Z a-z
滿 45 位元組的行開頭Mh
end 之前的最後一行`+
能否安全通過 EBCDIC 閘道器否是

編碼規格

字母表+ - 0-9 A-Z a-z
輸出體積約 137%,含行首長度字元
填充每行最多 45 位元組
標準xxencode
區分大小寫是

編碼範例

輸入 (UTF-8)輸出
Hello, World!begin 644 data.bin BG4JgP4wg63RjQalY6E++ + end
Base64.isbegin 644 data.bin 7Ea3nNHMo9aZn + end
你好begin 644 data.bin 4t9qUtOKx + end

常見問題

如何區分 uuencode 和 xxencode?
看資料行即可。xxencode 的資料行只包含字母、數字、加號和減號,滿行以 h 開頭;uuencode 的資料行含有標點符號,滿行以 M 開頭。如果在這裡解碼時提示無效字元,可以試試 uuencode 頁面。
工具會生成 begin 和 end 行嗎?
會。預設會輸出帶有你所填檔名的 begin 644 行以及結尾行。如果只需要編碼後的資料行,關閉該選項即可。
沒有 begin 行也能解碼嗎?

可以。沒有 begin 行時,所有非空行都會被當作資料解碼;有 begin 行時,解碼從它之後開始,到 end 行結束,前後的其他文字會被忽略。

xxencode 現在還有人用嗎?
很少。如今主要出現在舊的郵件和新聞組存檔中。新資料建議使用 Base64,它幾乎處處受支援,在只能傳輸文字的渠道中同樣安全。