ファイルを選択
  1. base64hub
  2. その他の基数
  3. xxencode

xxencode・xxdecode オンライン変換ツール

テキストを入力すると、英字、数字、+、- だけを使う uuencode の変種である xxencode の出力が得られます。方向を切り替えればブロックを xxdecode でき、ファイル名は begin 行から取得します。

無料 登録不要・制限なし ローカル アップロードなし 安全な 64 文字 + - 0-9 A-Z a-z 更新日 2026/10/27
入力 0バイト 0 B出力 0

ブラウザ内で処理されます。このページがデータをどこかに送信することはできません – その根拠

xxencode と xxdecode の使い方

エンコードするには:

  1. 入力 · テキスト にテキストを入力するか貼り付けます。xxencode されたブロックが 出力 · xxencode に表示されます。
  2. 出力の下の ファイル名 を、受け取る人に渡したい名前にします。デフォルトは data.bin です。
  3. データ行だけが必要なら begin/end 行 のチェックを外します。

デコードするには:

  1. 方向の切り替えで xxencode → テキスト をクリックします。
  2. ブロックを貼り付けます。メールヘッダーやメモなど、begin 行より前のテキストは読み飛ばされます。
  3. 結果を読むか、バイナリの内容なら 変換先 を Hex(16進数) にするか、バイトを保存 をクリックして begin 行の名前でダウンロードします。

xxencode が生まれた理由

uuencode のアルファベットはスペース(またはバッククォート)から _ までのすべての文字で、[、]、^、\、! を含みます。これらの文字は、IBM のメインフレームや BITNET ネットワークなど、ASCII と EBCDIC のシステム間のメールゲートウェイで問題を起こしました。EBCDIC に一対一で対応する文字がなかったからです。ファイルは文字が入れ替わった状態で届き、デコードすると意味のないデータになりました。

xxencode は uuencode の構造を保ったまま、アルファベットを確実に変換できる 64 文字(+、-、0~9、A~Z、a~z)に置き換えたものです。値 0 は +、値 1 は -、数字は値 2 から始まり、小文字の z が 63 です。

uuencode と xxencode の比較

同じ入力を、ファイル名 hello.txt で両方の形式にしたものです。

入力uuencode のデータ行xxencode のデータ行
Cat#0V%T1Eq3o
Hello, world,2&5L;&\L('=O<FQDAG4JgP4wg65RjQalY
ゼロのバイト 4 つ$````````2++++++++

各行の先頭の文字は、その形式自身のアルファベットで表したバイト数です。3 は uuencode では #、xxencode では 1、12 は , と A、4 は $ と 2 です。45 バイトの満杯の行は、uuencode では M、xxencode では h で始まります。

xxencode されたファイル全体は次のようになります。ここでは The quick brown fox jumps over the lazy dog. 0123456789 を fox.txt として保存しています。

begin 644 fox.txt
hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNmsU
8A12mAnEpBXQsCE++
+
end

サイズは uuencode と同じです。3 バイトにつき 4 文字に加え、各行に長さを表す文字と改行が付くので、入力より約 38% 大きくなります。

Python での xxencode

Python に xxencode はありませんが、binascii.b2a_uu が同じ 6 ビットの値を出力するので、その出力を uuencode のアルファベットから xxencode のアルファベットに置き換えれば、長さの文字も含めて正しい xxencode の行が得られます。

import binascii

UU = "`" + "".join(chr(c) for c in range(33, 96))
XX = "+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
TO_XX = str.maketrans(UU, XX)

def xxencode_line(chunk: bytes) -> str:
    return binascii.b2a_uu(chunk, backtick=True).decode().translate(TO_XX)

xxencode_line(b"Cat")    # '1Eq3o\n'

45 バイトずつ渡し、先頭に begin 644 name、末尾に + と end を付け加えてください。デコードには str.maketrans(XX, UU) で置き換えてから、各行に binascii.a2b_uu を呼びます。バイト列とエンコードについては Python のページ を参照してください。

よくある問題

  • xxencode だと言われたファイルから意味のない出力が出る。 満杯の行の先頭の文字を確認してください。M なら uuencode のファイルなので、uuencode ツール を使ってください。
  • 行のデコード結果の長さがおかしい。 長さを表す文字が変わったか失われています。行を折り返し直したメールクライアントが原因であることがよくあります。xxencode では、分割されたり結合されたりした行は復元できません。
  • デコードしたファイルが途中で切れる。 ブロックが複数のパートに分けて投稿されています。begin と end を 1 つずつにして順番どおりにつなぎ、その結果をデコードしてください。

よくある質問

xxencode と uuencode の違いは何ですか?

アルファベットだけです。どちらも 3 バイトを 4 文字にし、最大 45 バイトの行に長さを表す文字を付け、begin と end で囲みます。uuencode はバッククォートと ! から _ までの ASCII の範囲を使い、xxencode は +、-、数字、英字を使います。

ファイルが xxencode か uuencode かを見分けるには?

満杯のデータ行の先頭の文字を見ます。どちらも 45 バイトを表しますが、M なら uuencode、h なら xxencode です。`、#、% のような記号だらけの行なら uuencode です。

xxencode されたファイルをデコードできるプログラムは?

UUDeview は両方の形式を扱え、Debian や Ubuntu では uudeview パッケージです。GNU sharutils の uudecode は uuencode と Base64 は読めますが、xxencode は読めません。

xxencode のファイルが + の行で終わるのはなぜですか?

+ は xxencode で 0 を表す文字なので、+ だけの行は長さ 0 のデータ行です。uuencode でバッククォート 1 つだけの行が end の直前に置かれるのと同じ役割です。