Binary to Text Converter
Translate binary code strings (base-2) back into readable plain ASCII/UTF-8 text.
Bits need an encoding before they become text
A binary sequence is only a number until an encoding and grouping rule give it meaning. 01000001 can represent decimal 65, which is A in ASCII and Unicode, but a continuous stream may instead contain integers, compressed bytes, an image, or machine instructions. This binary to text converter applies a simple character-code interpretation to whitespace-separated bit groups. Its reverse mode converts JavaScript UTF-16 code units to base-2 strings.
That makes it useful for classroom exercises, CTF clues, simple protocol samples, and quick checks of ASCII-like data. It is not a general file decoder or a full UTF-8 byte codec.
Decoding a readable sequence
Select Binary to Plain Text and enter groups such as:
01000110 01101001 01101100 01100101
Each group is parsed as a base-2 integer and passed to JavaScript’s String.fromCharCode, producing File. Spaces, punctuation, and other non-bit characters are replaced with separators before groups are read. This means commas and line breaks can separate values:
01001111, 01001011
produces OK.
The converter does not enforce eight bits per group. 1000001 also produces A, and a 16-bit group can become one UTF-16 code unit. Whitespace is therefore semantic: 01000001 01000010 becomes AB, while 0100000101000010 is one large number that is reduced by fromCharCode to a single code unit rather than automatically split into bytes.
Encoding plain text in reverse
Choose Plain Text to Binary to visit every UTF-16 code unit in the input. Each value is converted to base 2 and padded to at least eight digits, then separated with spaces. Basic Latin text gives familiar bytes:
Cat
becomes:
01000011 01100001 01110100
padStart(8, '0') establishes a minimum width, not a maximum. Characters whose code unit exceeds 255 produce more than eight bits. Many emoji are represented by a surrogate pair, so one visible symbol becomes two binary groups. This output is a representation of JavaScript UTF-16 code units; it is not the UTF-8 byte sequence normally written to a file or sent over a network.
ASCII, UTF-8, and UTF-16 are different layers
ASCII assigns values 0 through 127. UTF-8 preserves those one-byte values and uses multibyte sequences for other Unicode code points. JavaScript strings internally expose UTF-16 code units through charCodeAt, which is what this tool uses in text-to-binary mode.
For A, all three views align at 01000001. For é, UTF-8 uses bytes 11000011 10101001, while the code-unit value U+00E9 is binary 11101001 when padded to eight bits. For an emoji, the divergence is larger. Use a UTF-8 encoder such as TextEncoder when you need actual wire bytes. Use this page when character-code exercises and simple ASCII data are the goal.
A packet-debugging workflow
Suppose a device log prints an ASCII command as binary octets. Preserve its original byte boundaries, paste the groups, and inspect the plain-text result. If it begins with a readable command but later shows control or unusual characters, compare each group with the protocol specification. A null byte may be a terminator; carriage return and line feed are control codes rather than visible text.
Do not strip boundaries before pasting. If the source is a continuous bitstream, split it according to the protocol’s field widths first. Eight-bit grouping is common but not universal. Confirm bit order as well: documentation may display the most significant bit first, while captured hardware signals may need reversal.
After decoding, copy only if the output is suitable for the destination. Invisible controls can survive in the string and behave unexpectedly in terminals or editors. A hex viewer is safer for arbitrary payloads.
Separators and sanitization
In decode mode, every character other than 0 or 1 becomes a space. Labels such as 0b01000001 are hazardous: the 0 in the 0b prefix remains a valid bit, while b becomes a separator, yielding an extra group. Remove 0b prefixes rather than relying on cleanup. Likewise, a timestamp containing zeros and ones may accidentally contribute groups.
Multiple separators collapse harmlessly. Underscores, hyphens, commas, and newlines can divide groups, but they cannot appear inside one group. If binary digits are separated individually, every bit is decoded as code 0 or 1 instead of being reassembled.
There is no error panel for invalid width or range. Non-binary material is simply transformed into separators, and parseable groups produce characters. Verify the group count and sizes yourself.
Control characters and blank-looking results
Values below decimal 32 include NUL, tab, line feed, and carriage return. They may create whitespace, move a cursor, or appear invisible in the output panel. Decimal 127 is DEL. A blank-looking conversion is not necessarily empty; inspect the original values or convert them to hexadecimal for diagnosis.
UTF-16 surrogate code units can also display as a replacement glyph or combine only when paired correctly. Arbitrary binary is likely to produce unpaired surrogates and control characters. This is expected when data is not actually character codes.
Limits for files and cryptographic data
The input area accepts text, not raw .bin files. It does not decompress data, interpret Base64, detect character sets, verify checksums, or understand two’s-complement integers. It also does not preserve bytes through a Unicode-safe binary container. For executable files, keys, hashes, encrypted payloads, and media, use byte-oriented tools.
Very large pasted streams can consume browser memory and make rendering slow. Command-line decoders or small scripts are preferable for repeatable batch work. Record the expected encoding, byte order, and grouping in tests rather than relying on visual conversion.
Verifying byte-oriented text correctly
When the source claims to be UTF-8, a byte-aware check should decode all bytes as one sequence rather than map each byte independently to a character. In browser code, that looks conceptually like constructing a Uint8Array and passing it to TextDecoder('utf-8', { fatal: true }). Fatal mode is useful during diagnosis because malformed sequences raise an error instead of silently inserting replacement characters.
For ASCII protocols, validate that every group is exactly eight bits and no value exceeds 01111111. Then compare the decoded command with an expected literal and separately assert required terminators such as CRLF. These checks prevent a visually readable result from hiding an extra NUL, nonbreaking space, or omitted line ending. Use the converter for exploration, then encode the assumptions in automated tests.
Preserve input before changing direction
The mode selector clears the text area when switching between decoding and encoding. Copy the source elsewhere first if you need to compare both paths. For an ASCII round trip, decode separated eight-bit groups, copy the visible text, switch modes, and paste it back; the resulting groups should match apart from any invisible controls that were lost during manual transfer. This test is intentionally limited to character values the page represents consistently. A non-ASCII mismatch can reflect UTF-16 code-unit encoding rather than damaged input, while a blank segment can be a retained control character rather than missing output.
Diagnosing common mistakes
If multiple expected letters become one odd symbol, groups were concatenated; restore spaces between code values. If every result is invisible, the groups may represent control codes or may have been split into individual bits. If 0b input adds strange characters, remove the prefixes. If non-ASCII text does not match UTF-8 documentation, remember the reverse conversion uses UTF-16 code units.
When emoji produce two groups, that is surrogate-pair behavior. When a group shorter than eight bits still works, width is not enforced. When punctuation seems ignored, decode mode deliberately uses it as a separator. Switching modes clears the input, so preserve any source you still need before changing direction.
Questions about binary text
Can I paste a continuous 8-bit stream?
Not directly if you expect byte splitting. Add separators at the correct boundaries first; the decoder treats each separated run as one number.
Does this decode UTF-8 binary?
It can decode ASCII bytes because ASCII overlaps UTF-8. It does not combine multibyte UTF-8 sequences into Unicode characters.
Why does an emoji become two binary values?
The encoder iterates JavaScript UTF-16 code units. Most emoji use a surrogate pair containing two code units.
Are commas allowed between bytes?
Yes. Non-bit characters become separators. Remove numeric prefixes and unrelated labels first.
Why is the output blank?
It may contain NUL or whitespace control characters. Check the input values in hex or decimal.
Is processing local?
The conversion runs in the browser component and the copy action uses the browser clipboard. Apply normal safeguards for sensitive content and clipboard history.