読者です 読者をやめる 読者になる 読者になる

StoryEdit 開発日誌

ウェブアプリ StoryEditを作ってましたが延期。普通のブログ。

base85について

Pythonの勉強に,とMercurialのコードをよんでたら,base85なるものを発見.base64は,以下の64文字ですべてを表現しちゃいましょってアルゴリズム.

// base64 chars
static const char base64chars[] = 
 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

そこで,もっと文字増やして,転送効率あげようや,ってのがbase85.

以下がbase85.

static const char base85chars[] = 
	"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~";

まぁどっちがいいかってのはbase85のほうが1バイトあたりの情報量多いので,転送量は減る.しかしなぜかbase128ではないんです.これはAsciiのコードセットには,'\n'とか'\m'とか入ってて,普通の記号の数が85程しかないからみたい.(実際にはダブルクオートとかバックスラッシュとか,プログラムでも使う厄介な文字は外されている)

base64とか85の特徴は,そのまま文字列として扱える,表現されるところなので,ascii文字セットが全部はいってたら困るってわけですね.

base85は古くはPostScriptに使われ,現在はgitとかmercurialとかにも使われています.


(追記)
Base85でのData scheme URIは利用不可能ですた.orz
(RFC2397: Data scheme URI, http://tools.ietf.org/html/rfc2397)