使い方
- uuencode 形式のブロックを作成するには「エンコード」を、ブロックからデータを復元するには「デコード」を選択します。
- 結果を uudecode コマンドで扱えるようにするには、「begin / end 行」をオンのままにして「ファイル名」を入力します。データ行だけが必要な場合はオフにします。
- データを入力または貼り付けるか、ファイルを開いてそのバイト列をエンコードします。
- デコードする場合は、begin 行があればそれも含めてブロック全体を貼り付け、結果をコピーするか、ファイルとしてダウンロードします。
uuencode とは
uuencode は Unix-to-Unix encode の略で、テキストしか送れない UUCP 回線を通じて Unix マシン間でファイルをコピーしていた 1980 年ごろに生まれました。3 バイトごとに 6 ビットの値 4 つに分け、それぞれに 32 を足して、スペースからアンダースコアまでの印字可能な文字にします。メールシステムでは行末のスペースが削除されることが多かったため、このツールと同様に、値 0 はスペースではなくバッククォート(`)で表されます。
uuencode されたファイルは、決まった構成を持ちます。
- ヘッダー行
begin 644 name。644 は Unix のファイルモードを 8 進数で表したもの(所有者は読み書き可能、その他のユーザーは読み取りのみ可能)で、name は作成されるファイルの名前です。 - 入力で最大 45 バイト分のデータ行。各行は長さを示す文字(32 にバイト数を足したもの。そのため、満杯の行は
Mで始まります)で始まり、その後に最大 60 文字のエンコード済みの文字が続きます。 - 0 バイトを意味するバッククォート 1 文字だけの行と、その後に続く
end行。
長さを示す文字と改行を含めると、出力は入力より約 38% 大きくなります。
現在の uuencode
MIME が登場する前は、プログラムや画像をメールで送ったり Usenet に投稿したりする際に uuencode を使うのが一般的でした。1990 年代に MIME の Base64 に置き換えられたのは、uuencode にはコンテンツタイプを示す手段がなく、互換性のない複数の派生版が存在し、一部の記号が ASCII と EBCDIC のシステム間のゲートウェイで書き換えられてしまうことがあったためです。最後の問題を解決するために作られたのが xxencode です。
uuencode されたデータは、現在でもメールやニュースのアーカイブ、古いシェルスクリプト、レガシーシステムで見かけることがあります。新しく使う場合は Base64 を、ファイル全体なら ファイル → Base64 を使ってください。
コマンドラインと Python での uuencode
# シェル(GNU sharutils):入力ファイル、続けて begin 行に書くファイル名
uuencode photo.jpg photo.jpg > photo.uu
uudecode photo.uu
# Python:一度に最大 45 バイトずつ、1 行単位で処理
import binascii
line = binascii.b2a_uu(b'hello', backtick=True)
binascii.a2b_uu(line) # b'hello'
Python の古い uu モジュールは Python 3.13 で削除されましたが、binascii の関数は引き続き使えます。
仕様
| 使用文字 | ASCII 32~96(スペース~`) |
|---|---|
| 出力サイズ | 行頭の長さ文字を含めて約 137% |
| パディング | 1 行あたり最大 45 バイト |
| 規格 | POSIX uuencode |
| 大文字と小文字の区別 | あり |
エンコード例
| 入力 (UTF-8) | 出力 |
|---|---|
Hello, World! | begin 644 data.bin
-2&5L;&\L(%=O<FQD(0``
`
end |
Base64.is | begin 644 data.bin
)0F%S938T+FES
`
end |
你好 | begin 644 data.bin
&Y+V@Y:6]
`
end |
よくある質問
uuencode されたテキストにバッククォートが含まれるのはなぜですか?
値 0 はスペースに対応しますが、行末のスペースは転送中に失われることがよくありました。そのため、このツールを含む多くのエンコーダーは、代わりにバッククォートを書き出します。デコーダーはどちらも受け付けます。
begin 644 とはどういう意味ですか?
エンコードされたブロックの開始を示します。644 は復元されるファイルの Unix パーミッション(所有者は読み書き可能、その他のユーザーは読み取りのみ可能)で、その後の語は uudecode が作成するファイルの名前です。ファイル名はオプションで設定できます。
begin 行がなくても uuencode をデコードできますか?
はい。begin 行がない場合は、すべての行をデータとしてデコードします。begin 行がある場合は、その次の行からデコードを始めて end 行で終了するため、メール本文などブロックの前後にあるテキストは無視されます。メールソフトによって削除された行末のスペースは、自動的に補われます。
uuencode は Base64 と同じですか?
いいえ。どちらも 3 バイトを 4 文字に変換しますが、uuencode は異なる文字の範囲を使い、各行に長さを示す文字を付け、begin 行と end 行を持ちます。Base64 の出力を uuencode としてデコードすることはできず、その逆もできません。