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)