Skip to content

Base91

Encode text or hex bytes to basE91 and back, with a size comparison against Base64 and Base85.

Input

Base91

basE91 packs binary data into printable ASCII more tightly than Base64 or Base85 — roughly 23% larger than the original bytes at worst, against Base64's fixed 33% and Ascii85's 25%. This tool converts text or raw hex bytes to basE91 and back, entirely in your browser.

Switch direction between encode and decode, and choose whether the raw side of the conversion is plain UTF-8 text or hex byte pairs — useful when you are packing binary data that isn't valid text on its own. Turn on "Wrap output at" to break a long encoded string into fixed-width lines, the way basE91 is often embedded in source files or config blocks. "Compare size with Base64 and Base85" adds the equivalent output length those encodings would produce for the same input, so you can see the saving at a glance.

Decoding validates the input by default: a character outside the basE91 alphabet is reported with its position, so a truncated paste or a stray character is easy to spot. Turn validation off to skip unrecognized characters instead — handy when the encoded block was copied out of surrounding prose. Whitespace and line breaks are always ignored, so wrapped or reflowed basE91 decodes cleanly either way.

Everything runs locally: your text and bytes are never uploaded anywhere, which matters if you're decoding tokens, keys or other sensitive payloads. Copy the result, download it as a .txt file, or send the output straight back into the input to chain another step.

FAQ

How is basE91 different from Base64?
basE91 uses a 91-character alphabet instead of 64, so it packs more bits into each output character — around 23% larger than the original data at worst, versus Base64's fixed 33% overhead.
Can basE91 output go straight into a URL or filename?
No. Its alphabet includes characters like " / : ? that need escaping in URLs and are invalid in some filenames — Base64url or Base58 are better fits for those.
What happens if a character in my input is not valid basE91?
With "Validate input when decoding" on, the tool reports the character and its position. Turn it off and unrecognized characters are skipped instead, matching how the reference basE91 decoder behaves.
Why would I decode into hex instead of text?
If the original data was binary — an image chunk, a key, a compressed block — decoding it as UTF-8 text would either fail or show garbled characters. Hex shows the exact bytes.
Is my data uploaded anywhere?
No. Encoding and decoding run entirely in your browser — nothing you paste here is sent to a server.