Base64 が 64 文字を使うところを、47 の都道府県を数字として使う符号化。
北海道が 0、沖縄県が 46。あとは 47 進数を書き下すだけ。
47 都道府県には、どの名前も他の名前の先頭になっていないという性質があります
(3文字名と4文字名しか無く、「神奈川」「和歌山」「鹿児島」はどれも県名ではない)。
つまり並びは前から順に一意に読み切れる ── 情報理論でいう接頭符号です。
Base64 が末尾に = を必要とするのに対し、base47 はパディングも区切りも要りません。
9 バイト(72 bit)をひとかたまりにして、47 進数 13 桁に書き直します。 4713 はちょうど 2569 をわずかに上回るので、無駄が最も少なくなります。 端数は下の表のとおりで、長さ自体が端数の情報を持つためパディングは不要です。
import { encode, decode, decodeText } from "base47";
encode("さくら"); // "香川県山形県奈良県長野県東京都…"
decodeText("香川県山形県奈良県長野県東京都…"); // "さくら"
encode(pngBytes, { separator: "・" });
$ base47 encode "さくら"
$ base47 decode 香川県山形県奈良県長野県東京都…
$ base47 encode -f photo.png --sep ' ' > photo.txt