Base84がファイル名にふさわしい理由
Base84 deserves a place in file names
TurboCryptがWindows対応のためBase91からBase84へ切り替えた。Windowsでは9文字が禁止され、末尾のドットも避ける必要があるため、84文字のアルファベットが最適。5文字で32ビットを約95%の確率で格納し、拡張率はBase64の33.3%より小さい25.2%。予約デバイス名も自然に回避できる。
5文字はスイートスポットだ。84⁵ = 4,182,119,424で、2³²にわずか2.6%足りない。
HNでの議論
60- abound
> エンコード順のアルファベットはこれだ:
> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&'()+,-;=@[]^_`{}~
ええ、シェルから何か操作する必要があるなら、ファイル名に最後の約22文字なんて絶対に欲しくないね
- bensyverson
英数字以外の文字はトラブルの元でしかない。エージェントはそれらを正しくエスケープできず、$は変数展開されてしまうだろう。
Base62(あるいは-_を使った64)で全く十分だ。
- killerstorm
base32より27%効率的だが、シェルスクリプトなどとのあらゆる奇妙な互換性問題を犠牲にしている。うわぁ!
- Dwedit
一方、Windowsは内部的にどこでもUTF-16を使っているので、「a」も「あ」もどちらも2バイトの大きさだ。ファイル名からサロゲートペアとUnicode制御文字を除外する必要は依然としてあるだろう。
- chaps
馬鹿げていて、ほんの些細な関連しかない質問だが……Base83は何か独自に役立つ点があるのだろうか?