各種エンコードの見分け方

ほかでも書いたとおり、NetNewsにファイルを流すためには、エンコードと呼ばれる処理を施さなければなりません。
これは、ニュースの記事を流すソフトウェアが主に7ビット文字(いわゆるUS-ASCII)専用であったことから、8ビット文字を含むバイナリデータがそのままでは流通できなかったことに由来します。

しかし、一口にエンコードと言っても種類があり、しかもソフトウェアによって各エンコードに対応するもの・しないものもあり、あなたの使用しているソフトウェアが不幸にして見たい記事のエンコードに対応していない、ということもままあります。
そういった場合、そのエンコードが何であるかを判断することが必要になります。

ここでは、各エンコードについて特徴についてまとめておきます。

主な種類

NetNewsで流れている主なエンコードの種類は、下の3種類になります。

ほかにもMac系のグループなどでBinHexなどが使われることがありますが、まれです。

各エンコードについて

UUEncode

NetNewsでは最も古くから利用されているエンコードです。
添付ファイルに対応しているニュースリーダで有れば、まず間違いなくサポートしているはずです。
仕様が単純なためか、多くの自動投稿ソフトウェアもこの形式を標準で採用しているようです。

このエンコードは、24ビット(3バイト)を1セットとして6ビットで分割しなおし、それぞれUS-ASCIIの文字にマップしたものです。
また、エンコードされたデータで構成される各行の頭には、行の長さを表す1文字が付加されます。(チェクサムと勘違いしている人が居ますが、あくまで「長さ」です。)
このことから、UUEncodeでエンコードされた記事は、元のデータに対して4/3倍+αのサイズ(133%以上)になります。

UUEncode単独でエンコードされた記事は、記事の頭に「begin 644 xxxxxx.jpg」等のように「begin」から始まるヘッダがあり、「`」だけの行と続く「end」行で1つのファイルの終端を表現します。
また、各行の先頭は長さを表す文字が付加されています。この文字は、最後の行を除いてほとんどの場合「M」です。

(これに関連して、古いバージョンのMicrosoft製ニュースリーダ「Internet News」「Outlook Express」などに、添付ファイルが無くても記事の本文中に「end」だけの行があると、それ以降の文章が読めなくなるバグがあることが知られています)

以上から、見分け方としては

があると言えます。
最後に、UUEncodeされたファイルの一例を挙げます。
begin 644 test.jpg
M_]C_X``02D9)1@`!`0$`2`!(``#_VP!#``(!`0(!`0("`@("`@("`P4#`P,#
M`P8$!`,%!P8'!P<&!P<("0L)"`@*"`<'"@T*"@L,#`P,!PD.#PT,#@L,#`S_
MVP!#`0("`@,#`P8#`P8,"`<(#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,
M#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`S_P``1"`&0`10#`2(``A$!`Q$!_\0`
M'@```00#`0$!``````````````4&!P@"`P0!"0K_Q`!+$``"`0,#`P($`P8#
M!`@$!04!`@,$!1$`!B$'$C$300@B46$4<8$)(S)"D:$54K$S8G*"%A<D0\'1
MX?`*4W.21&.BLO$T-I.CTO_$`!P!``("`P$!```````````````&!0<"`P0!
M"/_$`#P1``$#`@,%!@4"!0,%`0````$``@,$$04A,1)!46%Q!A,B@9'P,J&Q
MP=$'X10C0E+Q%21R)6*"LL*B_]H`#`,!``(1`Q$`/P#[^:-`Y&C0A>%`3XUX
M(@&SK+1H0O"H.O<8T:-"$:-&C0A&C1HT(1HT:-"$:QE7N'Y:RUX[`#SH0N*K
M`[=<L:CN/WYUT5;`.VM,8^;G6\7LM@713K@^^MX&3[Z:._NL^VNE-,7OEWI*
M.0KW)3AN^>0>V$'./N<#[ZAV\?M)]L6VJG[+97?@X(WE,\D@[V[<GM$:!LD@
M<?-_?C455XO1T[^[GE:UQW$YKJAHJB4;4;"0K)8_KKW4`6?]IKT;O5S@H:;>
M%+4U,D2RN8896BC#9&>[M`(X\CCD<ZFK:.]K3OJTK76BXTMQI7Y$D+YQGQD>
M1^H&ML-;3RN+(GAQ&X$$_)82TTT8VI&$#F$J^^C7F<G7HUTKF)604X&LM>*<
MK]]>Z%BC1HT:$(T:-&A"-&C1H0C1HT:$(T$9T:-"%B4YXT:RQHT(7+0UOKA1
M]==6D^S)B(''.E#05Z=4:-&C0O$:-&C0A&C1HT(1HT:-"$:-&C0A!X&M,TH!
MYUE42B*,G7`9BY+,?RUDT+)H6FZ7&"UT<]55314]-3H9)))&[4C4>Y)\#4%=
M4?B6K;M#/!M^866W+\K7.=,U,X/!]%&&$'T9@6(/`0C.D?K[UKDWKO.+;UH1
MK@L,N(Z='"HSKR993YP.,<'&0<#)9<K7TEIY:6.>]O'<)U^98NW%/'SG^$_Q
M>W+?3QI(QS'IWEU/0G3(N_!_&?1,%%0QL`EJ!KH%!&Y/\+W1+*8;+N#<$T[D
M2,#7@0`^!KCJ)GS.VY#<KM@:R%NRP6";EDVJU/%\ZKS]1I7CM**@^49UVXQH
MUJ69<2M45*L8X&-;0,:-&A8HT:-&A"-&C1H0C1HT:$(T:-&A"-&C1H0C1HT$
99T(6J8@/RP'&C2=<ZWTZL@'/&C0L@TK_V0``
`
end

Base64

近年、Outlook Express等が標準で採用するようになってから使われるようになってきたエンコード方式です。
日本のニュースグループでは、Outlook Expressで投稿する人が多いため、この形式でエンコードされている記事に出会うことが多いと思います。
逆に、海外のグループでは自動投稿ソフトが普及しているため、UUEncodeが主流です。

このエンコードは、UUEncodeと同じく24ビット(3バイト)を6ビットずつ分割してUS-ASCIIにマップするのは同じですが、マップされる文字が異なり、また各行の長さを表す文字が有りません。
このことから、エンコード後のサイズは、UUEncodeよりは若干小さくなります。(それでも133%以上にはなりますが。)
また、UUEncodeと異なり、Base64単独ではファイルのエンコード形式としては認識されず、かならずMIME(Multipurpose Internet Mail Extension)とセットで使用されます。
MIMEは、データの名前や形式といった情報を表現する様式です。ここに、エンコード形式として「Base64」と、エンコードされたデータのファイル名といった付加情報が記述されます。
MIME自体はエンコード形式について制限しませんので、UUEncodeなMIMEデータ、というのも可能です。よって「MIME = base64」ではありません。

Base64の特徴としては、

等があげられます。
最後に、Base64エンコードされたファイルの一例を挙げます。

------=_NextPart_000_000C_01C1E9F8.23002DA0
Content-Type: image/jpeg;
	name="test.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="test.jpg"

/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG
BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAGQARQDASIA
AhEBAxEB/8QAHgAAAQQDAQEBAAAAAAAAAAAAAAUGBwgCAwQBCQr/xABLEAACAQMDAwIEAwYDBAgE
BQUBAgMEBREABiEHEjETQQgiUWEUcYEJIzJCkaEVUrEzYnKCFhckQ8HR4fAKU3OSRGOisvE0NpOj
0v/EABwBAAICAwEBAAAAAAAAAAAAAAAGBQcCAwQBCP/EADwRAAEDAgMFBgUCBQMFAQAAAAEAAgME
EQUhMRJBUWFxBhMigZHwMqGxwdEH4RQjQlLxFSRyJWKCssKi/9oADAMBAAIRAxEAPwD7+aNA5GjQ
heFAT414IgGzrLRoQvCoOvcY0aNCEaNGjQhGjRo0IRo0aNCEaxlXuH5ay147ADzoQuKrA7dcsaju
P3510VbAO2tMY+bnW8XstgXRTrg++t4GT76aO/us+2ulNMXvl3pKOQr3JThu+eQe2EHOPucD76h2
8ftJ9sW2qn7LZXfg4I3lM8kg727cntEaBskgcfN/fjUVV4vR07+7nla1x3E5rqhoqiUbUbCQrJY/
rr3UAWf9pr0bvVzgoabeFLU1MkSyuYYZWijDZGe7tAI48jjkc6mraO9rTvq0rXWi40txpX5EkL5x
nxkeR+oGtsNbTyuLInhxG4EE/JYS000Y2pGEDmEq++jXmcnXo10rmJWQU4GsteKcr99e6FijRo0a
EI0aNGhCNGjRoQjRo0aEI0EZ0aNCFiU540ayxo0IXLQ1vrhR9ddWk+zJiIHHOlDQV6dUaNGjQvEa
NGjQhGjRo0IRo0aNCEaNGjQhB4GtM0oB51lUSiKMnXAZi5LMfy1k0LJoWm6XGC10c9VVTRU9NToZ
JJJG7UjUe5J8DUFdUfiWrbtDPBt+YWW3L8rXOdM1M4PB9FGGEH0ZgWIPAQjOkfr71rk3rvOLb1oR
rgsMuI6dHCozryZZT5wOMcHGQcDJZcrX0lp5aWOe9vHcJ1+ZYu3FPHzn+E/xe3LfTxpIxzHp3l1P
dUwlPDqe7xjBB+2mXevhJpLs5kQCjnIwJYVH9SDwT9yNWAMYJzjXvprnwNd7cUna0NB0XGcOg2i6
2ZUK9O/hYt/TqsN1Z6m7Xn0zFFVVjBzSo38SwoAFi7s4YqAWHBJHGnGdmVElRkJnH9RqSMDXgQA+
BrjqJnzO25DcrtgayFuywWCblk2q1PF86rz9RpXjtKKg+UZ124xo1qWZcStUVKsY4GNbQMaNGhYo
0aNGhCNGjRoQjRo0aEI0aNGhCNGjRoQjRo0EZ0IWqYgPywHGjSdc6306sgHPGjQsg0r/2Q==

------=_NextPart_000_000C_01C1E9F8.23002DA0--

yEnc (yEncode / yDecode)

2001年後半から2002年初頭にかけて、急速に普及したエンコード方式です。
主に海外のグループで使われており、対応ソフトウェアが未だ少ない状況が続いています。
特に、Outlook Expressが標準で対応していないため、yEncでエンコードされた記事は対応ソフトか、特殊なソフトを使ってみるほか手段がありません。

このエンコード方式の最大の特徴は、現在ではサーバソフトウェアのほとんどが8ビットのデータでも正常に処理できることに着目し、あえて8ビットのデータを流すことで、データの分割とマッピングによるオーバーヘッドをなくし、数%の容量アップで押さえることができる点です。
あえて数%増やしてエンコードするのは、Netnewsのプロトコル(NNTP)で制御コードとして使用される改行などを別の文字に置き換えるためです。
このような特徴から、大きなデータを流す際に非常に有効なため、海外の動画系グループを中心に急速に普及してきています。
また、現在エンコード仕様はドラフト状態で、正式に確定したものではないようですが、今後も対応ソフトウェアの増加・普及が見込まれます。
注意点としては、海外のソフトウェアの中には、yEncode対応を謳いながら完全準拠ではない壊れたデータを吐き出すものがある点です。

yEncodeされた記事は、=ybeginヘッダで始まり=yendフッタで終わります。
記事が分割されている場合には、分割情報などもヘッダに付加されています。
また、ほとんど90%以上がバイナリで構成されることから化けて汚く見えることが多く、対応していないソフトウェアではデータが壊れて受信されることもあります。
このため、できるだけネイティブに対応したニュースリーダを使用した方が、確実にデコードできると思われます。

以上の点から、見分け方は

などがあります。
最後にyEncodeでエンコードされたデータの一例を挙げます。

=ybegin part=1 total=1 line=128 size=23583 name=test.jpg 
=ypart begin=1 end=23583
ュュスュ┓オャンャャウ・・ユャヤャハャャャ皚l74fKWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWh74fzh74f杉・J甑侭徃MZZZZ瑞h74ャロャ・徽・オャスuチ址皰ャ・k}zkwャサクヒャ皰ャロャ隱坎鍖姙ャ皚l74ャャ遶kュ発ッォ・くyュオォ・カ卉|ャ・xャロャ
ュ俗ウュ洒オRキ豬・kサ鵡洳鬪駻ャタ頂ィャ皰ャロャ隱=Jウ・・・皚l74fY杉・h74fY喇74fKWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWh74fn~hflhスリウュ椚jュmュオャ・慣招=@クィfYlh74ォjfnnh3オコサャ魑vクタャ・慣小・kュ妙遣俗ケォ・xォoュ俗ウュ
椚lュ遣xャサヌサャンャ罩kオvクタャ・ずwツ|ャ743ャイ"ャユオxャロャ甃・哮ャ鍖鬪廱kソヤエョスエキ小鵺ャクオセpコユャ・娚絳鬪飫イ"ャユオxャロャ゚ャャ皚l743ャ゚ャ隨ヤャ・ヌkスリウ
ZbY[]743fnnhシイヌoキ・岡鷙・フォkf徽凋署gL巨埜醜椶朖hウ垳セ・オォ・オュ洒遣xfY吃ャコンクリキ・・4743fYnvh74fYyvh74fY嫌璽h74fY寵蘭h74
=yend size=23583 part=1 pcrc32=BA382EE7 crc32=BA382EE7

どのエンコードにすべきか

これから投稿する際に、上記にあげたエンコードのうちどれを採用するかですが、とくに理由がなければUUEncodeをおすすめします。
特に日本のグループに投稿するということであれば、yEncodeは避けるべきです。

現状では、日本語のソフトウェアでyEnc対応のソフトはごく限られており、またOutlook Expressがサポートしていない現状では、(特に初心者に)いたずらに混乱を招く結果になります。
yEnc自体、まだまだ仕様はドラフト状態で固まったものではありませんので、もう少し待ってからでも遅くはないように思います。