使用方法
- 選擇「編碼」生成 xxencode 資料塊,或選擇「解碼」把資料塊還原為資料。
- 保留 begin 和 end 行並設定檔名可得到完整的資料塊;關閉該選項則只輸出資料行。
- 輸入或貼上內容,也可以開啟檔案,結果會隨輸入即時更新。
- 複製或下載結果。解碼時如果資料不是文字,請選擇十六進位輸出或直接下載檔案。
什麼是 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 對比
| uuencode | xxencode | |
|---|---|---|
| 字元 | ASCII 32 到 95,零值用反引號 | + - 0-9 A-Z a-z |
| 滿 45 位元組的行開頭 | M | h |
| end 之前的最後一行 | ` | + |
| 能否安全通過 EBCDIC 閘道器 | 否 | 是 |
編碼規格
| 字母表 | + - 0-9 A-Z a-z |
|---|---|
| 輸出體積 | 約 137%,含行首長度字元 |
| 填充 | 每行最多 45 位元組 |
| 標準 | xxencode |
| 區分大小寫 | 是 |
編碼範例
| 輸入 (UTF-8) | 輸出 |
|---|---|
Hello, World! | begin 644 data.bin
BG4JgP4wg63RjQalY6E++
+
end |
Base64.is | begin 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,它幾乎處處受支援,在只能傳輸文字的渠道中同樣安全。