Base100 is an emoji-based byte encoding that maps every byte value from 0 to 255 to exactly one Unicode code point in the range U+1F3F7 through U+1F4F6. The formula is straightforward: take the byte value, add it to U+1F3F7, and the result is the symbol that represents that byte. Because every code point in that range is a single emoji-range character, ordinary text such as "Hi" becomes a short, distinctive stream of emoji symbols that stands out inside any chat thread. Base100 works on UTF-8 bytes rather than on the characters a user types, so a single accented letter, Chinese character, or emoji in the source text may expand into two, three, or four Base100 symbols depending on how many UTF-8 bytes that character needs. The encoding is fully reversible, runs locally in the browser, and is documented in the original base100 project on GitHub.

What Base100 Encoding Actually Does
Most beginner-friendly encodings try to squeeze data into a small alphabet such as A-Z, 0-9, +, and /. Base100 takes the opposite path: it uses 256 unique symbols drawn from a high-numbered emoji Unicode block. Every byte your input can produce already has a dedicated symbol, which means the mapping never needs padding, delimiters, or a length marker. The output looks unusual, but the math under the hood is one of the simplest encodings you will ever meet.
If you have ever pasted a string of weird symbols into a chat and watched friends try to copy them, you have already seen why a byte-exact encoding matters. When a system quietly inserts a zero-width character or swaps a similar-looking glyph, the decoded text changes. Base100 keeps that risk visible by giving every byte its own recognizable slot, and strict decoders refuse to guess when something looks off.
The One-Byte-One-Symbol Rule
The mapping is built on a single addition. Take the code point U+1F3F7 and add the byte value:
- Byte 0 becomes U+1F3F7 (the lowest symbol in the range).
- Byte 1 becomes U+1F3F8 (one step up).
- Byte 255 becomes U+1F4F6 (the top of the range).
That is the whole encoding. There is no checksum, no compression, no translation table, and no delimiter between symbols. The official Base100 specification documents this byte-to-code-point formula, and independent implementations follow the same math. Because the mapping is purely numeric, every conforming decoder subtracts U+1F3F7 from each symbol to recover the original byte.
| Input byte | UTF-8 hex | Resulting code point | Position in range |
|---|---|---|---|
| 0 | 0x00 | U+1F3F7 | Lowest |
| 1 | 0x01 | U+1F3F8 | Lowest + 1 |
| 72 (ASCII "H") | 0x48 | U+1F43F | 72 above the base |
| 105 (ASCII "i") | 0x69 | U+1F460 | 105 above the base |
| 255 | 0xFF | U+1F4F6 | Top of the range |
The visual emoji shown for each code point depends on the operating system, font, and browser. The math does not. As long as the code points are preserved, the decoded bytes are identical.
How to Encode Text With Base100
Encoding with the Base100 Encoder / Decoder is a quick, three-step process that works entirely in your browser:
- Open the tool and select the "Text to Base100" direction.
- Type or paste your UTF-8 text into the input field. The tool first converts the text to its UTF-8 byte sequence and then maps each byte to a Base100 code point by adding its value to U+1F3F7.
- Click encode, then copy the resulting symbol stream exactly as it appears. Do not add spaces, line breaks, or emoji variation selectors in the middle of the stream.
A practical worked example using two ordinary ASCII letters makes the formula concrete. Encoding the word "Hi" produces two symbols because each letter is one UTF-8 byte:
- "H" is byte 72 (hex 0x48), so the encoder emits U+1F3F7 + 72 = U+1F43F.
- "i" is byte 105 (hex 0x69), so the encoder emits U+1F3F7 + 105 = U+1F460.
Substituting the numbers into the formula: 0x1F3F7 + 0x48 = 0x1F43F and 0x1F3F7 + 0x69 = 0x1F460. The output stream is therefore exactly two code points, no padding, no delimiter. That output is your Base100-encoded text.
How to Decode Base100 Symbols Back to Text
Decoding is the reverse trip, but beginners quickly learn that strictness is the whole point. Use the same Base100 Encoder / Decoder and switch the direction:
- Choose "Base100 to text."
- Paste the symbol stream you want to decode. Every symbol must fall inside U+1F3F7 through U+1F4F6 with no variation selectors, spaces, or line breaks added by your chat app.
- Run the decoder. It iterates the input by code point, subtracts U+1F3F7 from each symbol to recover the original byte, and then runs a fatal UTF-8 validation. If any symbol is outside the range or the byte sequence is not valid UTF-8, the tool reports an error instead of silently inserting replacement characters.
A successful decode returns your original text byte-for-byte. A failed decode returns an error instead of silently inserting replacement characters, which is how the strict decoder protects you from a copy-paste that looked fine on screen but had been mangled in transit.
Why Some Characters Turn Into Multiple Symbols
This is the single most common surprise for new users. Base100 does not count the characters you see; it counts the bytes those characters occupy in UTF-8. The relationship is roughly one to one for plain ASCII text, but it grows fast as soon as your input contains anything outside the English alphabet:
| Input character | Approximate UTF-8 byte count | Approximate Base100 symbol count |
|---|---|---|
| Plain ASCII letter (A-Z, a-z) | 1 byte | 1 symbol |
| Accented Latin letter (é, ñ, ü) | 2 bytes | 2 symbols |
| CJK character (中, 日, 한) | 3 bytes | 3 symbols |
| High emoji or supplementary symbol | 4 bytes | 4 symbols |
The exact figures depend on the specific byte sequence your text produces, so use the tool to count symbols for any given input. The general direction is the part that matters: more complex characters always expand, never shrink, in Base100.
What Base100 Is Not (Beginner Misconceptions)
Beginners sometimes confuse Base100 with encryption because the output looks scrambled. The mapping is fully public, fully reversible, and fully readable by anyone who knows the formula. Treat the following as hard rules:
- Base100 is not encryption. It hides text behind a strange alphabet, not behind a secret key.
- Base100 is not a hash. There is no checksum, no signature, no authentication, and no way to detect an accidental change.
- Base100 is not compression. Output is always at least as long as the input measured in bytes, and is usually longer for non-ASCII text.
- Base100 is not steganography. The encoded stream looks obviously different from normal text.
- Base100 is not a human-language emoji translation. Each symbol represents a numeric byte, not a word, meaning, or visual concept.
If you need secrecy, integrity, or tamper detection, reach for reviewed encryption such as AES-GCM, authenticated hashing, or a signed message format instead. For ASCII-only transport, formats like Base64, Base32, Base58, or hex usually travel through more systems without being modified.
Fixing Copy-Paste Problems Before Decoding
Many failed decodes are not caused by the encoder at all. The most common culprits are chat apps, keyboards, input methods, and normalization pipelines that quietly insert a variation selector, a zero-width space, or a substitute emoji. A stream that looks identical on screen can be bytewise different from what was produced, and strict Base100 decoding will reject it. To keep things stable:
- Copy the symbol stream from the source that generated it whenever possible, rather than retyping it.
- Avoid auto-correct and emoji-replacement features when pasting Base100 output into a chat or document.
- If decoding fails, regenerate the symbol stream from the original source and remove any invisible characters before retrying.
- Stay inside the 500,000 byte or symbol limit per operation so the browser tab does not stall on an accidental huge paste.
The strict rejection is a feature, not a flaw. It tells you when the data was changed in transit instead of pretending everything is fine and returning nonsense text.
Where to Go Next With Base100
Once the basic flow feels comfortable, a few follow-up reads sharpen the picture. Beginners who want a quick reference for byte values and their code points will appreciate the Base100 cheat sheet, which lines up common bytes with their Base100 symbols side by side. From there, you can explore larger pastes, programmatic workflows, or how the same mapping is implemented in other languages. The format itself is small enough to read in a sitting, and that is exactly what makes it a friendly first encoding for anyone new to byte-level data work.