■Shuriken ― uuencodeされた添付ファイルが開けない

  1. uuencodeとは
  2. 問題点
  3. 原因
  4. 対策


1.uuencodeとは Aug. 24, 2002

メールを発信するためのプロトコルであるSMTPは元々7ビット以内のASCIIコードしか送信することができません。
このプロトコルはメッセージメールのやりとりを定義したものだったので、アルファベットの大文字小文字、数字、記号 のキーボードから入力できるコードと制御コードが送れればよかったからです。

しかし、画像データや実行ファイルは、8ビット(具体的には0x00〜0xFF)の配列の固まりであるため、SMTPプロトコルでは 送信することができません。
送信するには、

8ビットのコードを7ビットに変換し、仮想的に7ビットのASCIIコードに 変換する必要がある
のです。

ここでピンと来た方もいらっしゃるかも知れませんが、uuencodeというは、UNIX標準で使われていた 8ビット→7ビット符号化(プログラム)のことなのです。

ただし現在では、符号化は BASE64という方式がUNIXでもWindowsでも、macでも標準となっています。


ところでメールで日本語をそのまま送れるコードは、JISコードのみです。JISコードの漢字は0x21〜0x7Eの 範囲にあるからなのです。それ以外のコードを使うときにはMIMEに準拠してヘッダを拡張し、 uuencodeやBASE64で符号化する必要があります。



2.問題点 Aug. 25, 2002

やっと、本題ですが^^;)、Shurikenシリーズはuuencodeに対応しています。(uudecode可能)
しかし、特定のメーラから送られてきた添付ファイルが開けないと言う事象が発生することがあります。
私の知る限りでは、wemail32というメーラとStarOffice (NEC)です。



3.原因 Sep. 6, 2002

uuencodeでは、ビットストリームを7ビットごとに抜き取っていきます。
そして必ず0x20を足して、0x20〜0x7Eの範囲になるようにします。
0x20はスペースを意味しますが、世界中にある SMTPサーバはこのスペースが届いた時点で後のメッセージを捨ててしまうというとんでもないサーバがあるらしいのです。
そのため、uuencodeでは、0x20を0x60(`)等に置換して スペース(0x20)のコードを無くす方法がとられています。

また、uuencodeではエンコードした後適当な位置で改行しますが、そのとき行頭には 元のバイナリコードが何バイトあったのかを記録します。(当然、0x20を足します。)
(一般的に45バイトで改行するため、45(0x2D) + 0x20 = 0x4D = 'M'であるため、uuencodeでエンコードされた 後のコードは最後の行を除いて行頭が'M'になっています。)

uuencodeはこれ以上デコードするものはないよ、という意味で、行頭に0バイトを意味するコード(0x00+0x20=0x20)を 書いて終了します。

つまり、uuencode形式でエンコードされた文字の集まりの最後の行はスペース or ` が1つあるのです。

Shurikenシリーズは、エンコードされた文字全体が0x20でも0x60になっているものでも正しくデコードできます。
しかし、最後の0バイトを意味するコードだけは、0x60でないと正しくデコード出来ないのです。

wemail32は、0x20を全て0x60に変換していますが、何故か最後の0x60の後に0x20を1つだけ挿入してしまいます。
Shurikenは、uudecodeの実装上の問題から、これを正しくデコードできません。
また、StarOfficeの場合には0x20がそのままで届くために正しくデコードできません。



4.対策 Sep. 6, 2002

メールが保存されているフォルダを直接開き、該当する .mbxファイルをJISコードの扱える エディタで開きます。メモ帳でも開くことはできますが、保存すると Shift JISしか扱えないので文字コードが破壊され読めなくなる可能性があります。

uuencodeされた添付ファイルの終わりの方を探して下さい。
必ず最後に endがあるので見つけやすいと思います。

7````````````````````````````````
`←ここ
end
上記の部分がスペースになっていれば、それを`に置き換えます。
これだけで完了です。
また、上記の最後の`の後にスペースが入っている場合にはこれを削除するか、`に置き換えます。






[戻る]




このページ以降で記載されている社名/商品名などは一般に各社の商標または登録商標であり、
このページではTMや®マークは省略しています。

Copyright ©2002, 2003  by T. Kobayashi
All Rights Reserved.

tomo@peace.ne.jp