> unix | クラシック | レガシー <

// UUencoding – バイナリデータをテキストチャンネルで送信するための Unix-to-Unix 形式

[UNIX]

クラシックな Unix 標準

何十年にもわたり、Unix システムでメール添付や Usenet 投稿などのバイナリ転送に利用されてきた歴史あるエンコード方式です。

[互換性]

高い互換性

多くの Unix / Linux ツールやレガシーなメールクライアントが UUencode をネイティブにサポートしています。

[自己完結]

自己完結したフォーマット

begin/end 行にファイル名とパーミッションを含めることで、受信側で元のファイルを再構成しやすくなります。

>> 技術情報

UUencoding の仕組み:

UUencoding は、バイナリデータをスペース (ASCII 32) から始まる印字可能文字だけを使って ASCII テキストへ変換します。Base64 と同様に 3 バイトを 4 文字にエンコードしますが、文字集合が異なり、begin/end 行にファイルのメタデータを含める点が特徴です。

例:

"Hello" → begin 644 data\n%2&5L;&\\`\n`\nend

UUencoding を使う理由:

  • >古い Unix / Linux スクリプトやツールとの互換性を維持したい場合
  • >ファイル名やパーミッションを含んだ自己完結型のテキスト表現が必要な場合
  • >過去のメールアーカイブや Usenet ログを解析する場合
  • >既存のワークフローが UUencode 形式を前提としている場合
  • >レガシー環境でテキストのみのチャネルを利用する場合

>> よくある質問

UUencoding とは何ですか?

UUencoding(Unix-to-Unix encoding)は、メールや Usenet などテキストしか扱えないチャネルでバイナリファイルを送信するために設計された、バイナリ→テキスト変換方式です。

UUencoding と Base64 の違いは?

どちらも 3 バイトを 4 文字にエンコードしますが、UUencoding はスペース (ASCII 32) から始まる別の文字集合を使い、begin/end 行にファイル名やパーミッション情報を含めます。

現在でも UUencoding を使うべき場面はありますか?

レガシーな Unix 環境や過去のアーカイブと互換性を保つ必要がある場合、または既存ツールが UUencode 形式を期待している場合には、依然として有用です。

現代のプロジェクトでの位置づけは?

多くの新しいシステムでは Base64 が使われますが、UUencoding への対応は、古いインフラや履歴データを扱う開発者にとって依然として重要です。

// クイックリファレンス

名前説明
Length charbyte count + 32 (45 bytes -> M)
Group3 bytes -> 4 chars, each 6 bits + 32 (space..underscore)
Zero valuebacktick ` instead of space
Lineup to 45 bytes -> 60 chars
Headerbegin 644 filename
Trailer` line, then end

// 計算例

Input   Cat      (0x43 0x61 0x74)
Bits    010000 110110 000101 110100  = 16 54 5 52
+32     48 86 37 84  ->  0 V % T
Line    #0V%T        (# = 3 bytes + 32)

begin 644 cat.txt
#0V%T
`
end

>> その他の質問

Q: UUencodeとは?

A: Unixの歴史的な方式(「Unix-to-Unix encode」)で、バイナリデータを印字可能なASCII文字に変換し、メールやUsenetで送れるようにします。3バイトが4文字になり、約33%増えます。

Q: UUencodeとBase64の違いは?

A: どちらも3バイトを4文字にします。UUencodeは6ビット値に32を足し(空白から「_」までの文字)、Base64はA–Z a–z 0–9 + /を使います。UUencodeは行ごとの長さ文字と、ファイル名と権限を含むbegin/end行も付けます。

Q: UUencodeは今も使われていますか?

A: ほとんど使われません。メールではBase64を使うMIMEが主流になりました。古いUsenetアーカイブやUnixのuuencode/uudecodeで見かける程度で、新規にはBase64が適しています。

その他の言語