Uuencode
一般的な変換フォーマット

uuencodeのフォーマットは、一行のヘッダー、複数行のエンコード文字列、一行のフッターからなる。
ヘッダは次の書式である。ここで、<mode>は3桁の8進数であり、UNIXのパーミッションを表す。<decode_pathname>はデコードされたときのファイル名である。パス名を含む事が出来るが一般にはファイル名のみである。
begin <mode> <decode_pathname>
このあと、エンコードされた文字列が続き、以下のフッタで終わる。
end
エンコードは3オクテット(24ビット)毎に行なわれる。これを4つの6ビット値に変換し、ASCII文字に割当てる。次は「Cat」という3オクテットのデータをASCIIの4文字に変換する例である。
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 元データ | C | C | C | C | C | C | C | C | a | a | a | a | a | a | a | a | t | t | t | t | t | t | t | t |
| オクテット値 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
| エンコード後のASCII文字 | 0 | 0 | 0 | 0 | 0 | 0 | V | V | V | V | V | V | % | % | % | % | % | % | T | T | T | T | T | T |
6ビット値に0x20を加えたときの下位6ビットをASCII値とする。この変換を表にすると次のようになる。
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|  | データ | 文字 |  |  | データ | 文字 |  |  | データ | 文字 |  |  | データ | 文字 |

| 0 | 000000 | スペース または ` |  | 16 | 010000 | 0 |  | 32 | 100000 | @ |  | 48 | 110000 | P |
| 1 | 000001 | ! |  | 17 | 010001 | 1 |  | 33 | 100001 | A |  | 49 | 110001 | Q |
| 2 | 000010 | " |  | 18 | 010010 | 2 |  | 34 | 100010 | B |  | 50 | 110010 | R |
| 3 | 000011 | # |  | 19 | 010011 | 3 |  | 35 | 100011 | C |  | 51 | 110011 | S |
| 4 | 000100 | $ |  | 20 | 010100 | 4 |  | 36 | 100100 | D |  | 52 | 110100 | T |
| 5 | 000101 | % |  | 21 | 010101 | 5 |  | 37 | 100101 | E |  | 53 | 110101 | U |
| 6 | 000110 | & |  | 22 | 010110 | 6 |  | 38 | 100110 | F |  | 54 | 110110 | V |
| 7 | 000111 | ' |  | 23 | 010111 | 7 |  | 39 | 100111 | G |  | 55 | 110111 | W |
| 8 | 001000 | ( |  | 24 | 011000 | 8 |  | 40 | 101000 | H |  | 56 | 111000 | X |
| 9 | 001001 | ) |  | 25 | 011001 | 9 |  | 41 | 101001 | I |  | 57 | 111001 | Y |
| 10 | 001010 | * |  | 26 | 011010 | : |  | 42 | 101010 | J |  | 58 | 111010 | Z |
| 11 | 001011 | + |  | 27 | 011011 | ; |  | 43 | 101011 | K |  | 59 | 111011 | [ |
| 12 | 001100 | , |  | 28 | 011100 | < |  | 44 | 101100 | L |  | 60 | 111100 | \ |
| 13 | 001101 | - |  | 29 | 011101 | = |  | 45 | 101101 | M |  | 61 | 111101 | ] |
| 14 | 001110 | . |  | 30 | 011110 | > |  | 46 | 101110 | N |  | 62 | 111110 | ^ |
| 15 | 001111 | / |  | 31 | 011111 | ? |  | 47 | 101111 | O |  | 63 | 111111 | _ |
元々「000000」はスペース文字であったが、かつて行末のスペースを取り去る転送系があったため、「`」に置き換えられた。
デコードにおいては、変数 c にエンコードされた文字のASCIIコードが入っているとすると (c XOR 0x20) AND 0x3f でデコードできる（範囲外の文字が入っている可能性は考慮していない）。スペースの「`」への置き換えには、このデコード法に全く変更を必要としないという利点があった。
次は「000000」にスペースを用いているuuencodeの一例である。これはSolaris 10の/usr/bin/uuencodeコマンドの出力である。
begin 644 testimg.png
MB5!.1PT*&@H    -24A$4@   "     @" 8   !S>GKT    !&=!34$  +&/
M"_QA!0   $=)1$%46$?MUK$- " (!$#<?VA$W0 *FR/Y4OU<@RLBLM*>S-'Q
M^^ZYH9TJ,!H%"! @0(  @1CMTO<9F$4! @0($"! X+? !I?UJM5MS!;U    
) $E%3D2N0F""
 
end
行の先頭はその行に含まれるオクテット数を示す。通常は45オクテットなので「M」であり、45オクテットに満たない行は別の文字となる。このケースでは「)」である。そのあとデータの終了を示すため、0オクテットを示す「スペース」のみの行が続き、「end」で終わる。
次は「000000」に「`」を用いている一例である。これはGNU sharutils 4.2.1に含まるuuencodeコマンドの出力である。
begin 644 testimg.png
MB5!.1PT*&@H````-24A$4@```"`````@"`8```!S>GKT````!&=!34$``+&/
M"_QA!0```$=)1$%46$?MUK$-`"`(!$#<?VA$W0`*FR/Y4OU<@RLBLM*>S-'Q
M^^ZYH9TJ,!H%"!`@0(``@1CMTO<9F$4!`@0($"!`X+?`!I?UJM5MS!;U````
)`$E%3D2N0F""
`
end
行末にスペースが現れない。この他に、スペースと「`」が混在しているケースも存在する。
これらのフォーマットは多くのデコーダでデコード出来る。