Three Binary-to-Text Encodings, Three Different Design Goals
Base32, Base58, and Base85 (Ascii85) all convert binary data into printable text, but each optimizes for a different constraint, which is exactly why three separate encodings exist instead of just using Base64 everywhere. Base32 uses a 32-character alphabet deliberately excluding visually similar characters (like 0/O and 1/I), making it well suited for values a human might need to read aloud or type manually — TOTP two-factor authentication secret keys are commonly Base32-encoded for exactly this reason.
Base58 (popularized by Bitcoin) goes further, excluding not just similar-looking characters but also punctuation that could cause problems in certain contexts (like double-clicking to select a whole string) — this is why Bitcoin addresses and similar identifiers use it, prioritizing human transcription accuracy over encoding density.
Base85 takes the opposite priority: it maximizes encoding density (roughly 25% size overhead versus Base64's 33%, and far better than Base32's 60%) at the cost of using a larger, less human-friendly character set including punctuation — used in contexts like PDF and PostScript files where compact binary embedding matters more than a human ever reading the encoded string directly.