Binary to text, plain and predictable
Binary to text decoding takes a string of 1s and 0s, splits it on any run of whitespace, and reads each chunk as a base-2 integer. Each integer becomes a single character via the browser native String.fromCharCode. The standard width is 8 bits per character (one byte), but the decoder happily accepts shorter or longer chunks: a 7-bit chunk decodes ASCII, a 16-bit chunk decodes a UTF-16 code unit, and a 21-bit chunk would decode a Unicode scalar value above the BMP.
Whitespace inside the input is treated as a delimiter, not as data. That means a stream like 01001000 01101001 decodes the same way as 01001000\n01101001 or 01001000\t01101001. Continuous strings without spaces are also accepted; the decoder splits them into 8-bit chunks from the left. If a chunk is not parseable as binary (contains a digit other than 0 or 1, for example), the output panel shows [invalid binary] so you can fix the source.
Empty input emits an empty string. Leading and trailing whitespace is trimmed before decoding. For the inverse direction, see text to binary. If you want hex instead of binary, see hex to text.
How to use convert binary to text
- 1Paste a binary stream into the input panel on the left.
- 2The decoded text appears in the output panel on the right as you type.
- 3Click Copy in the output header to copy the result.
- 4Click Download to save the result as a plain-text file.
- 5If the output reads
[invalid binary], check that every chunk contains only 0 and 1.
Keyboard shortcuts
Drive TextResult without touching the mouse.
| Shortcut | Action |
|---|---|
| Ctrl F | Open the find & replace panel inside the input Plus |
| Ctrl Z | Undo the last input change |
| Ctrl Shift Z | Redo |
| Ctrl Shift Enter | Toggle fullscreen focus on the editor Plus |
| Esc | Close find & replace, or exit fullscreen |
| Ctrl K | Open the command palette to jump to any tool Plus |
| Ctrl S | Save current workflow draft Plus |
| Ctrl P | Run a saved workflow Plus |
What this tool actually does
Whitespace is the chunk delimiter
The decoder collapses every run of whitespace (spaces, tabs, newlines) into a single space, trims the result, and splits on space to get the chunk list. That means single-spaced, double-spaced and line-broken input all decode to the same text. Mixed delimiters work too.
Char codes via String.fromCharCode
Each chunk is parsed with parseInt(chunk, 2) and passed straight to String.fromCharCode. That means values 0 to 65535 decode to a UTF-16 code unit. Values above 65535 do not survive without a surrogate pair, so above-BMP characters need explicit pairing.
Variable chunk width
The decoder accepts any chunk width, not just 8 bits. A 7-bit chunk decodes ASCII (1001000 -> H). An 8-bit chunk decodes Latin-1 / single-byte UTF-8. A 16-bit chunk decodes a UTF-16 code unit directly. The widths can even differ between chunks in the same input.
Invalid input shows a clear marker
If a chunk contains a digit other than 0 or 1, or fails to parse for any other reason, the output panel shows [invalid binary] instead of partial text. Fix the source and the output refreshes on the next keystroke.
Runs entirely in your browser
No upload, no server-side processing, no log of what you pasted. The decode runs on every keystroke via a single JavaScript pass. Long streams of a few hundred kilobytes still decode in under a second.
Worked example
Five 8-bit chunks decode to the five characters of Hello via String.fromCharCode.
01001000 01100101 01101100 01101100 01101111
Hello
Settings reference
| Behaviour | Effect on output |
|---|---|
| Chunk delimiter | Any run of whitespace (space, tab, newline). Collapsed to a single space before split. |
| Chunk width | Any width accepted. 7-bit ASCII, 8-bit Latin-1, 16-bit UTF-16 code units all decode. |
| Decoder | Each chunk parses with parseInt(chunk, 2); the integer feeds String.fromCharCode. |
| Empty input | Emits an empty string. |
| Leading/trailing whitespace | Trimmed before split. |
| Invalid chunk | Output shows [invalid binary]; no partial text is emitted. |
| Above-BMP characters | Need an explicit surrogate pair; a single 21-bit chunk does not survive String.fromCharCode. |
FAQ
Does it accept input without spaces between bytes?
0100100001101001 needs to be re-spaced first. Run a regex like (.{8}) with capture-and-replace in your editor to insert a space every 8 characters before pasting here.What chunk width does the decoder use?
1001000 (7 bits, ASCII H) and 01001000 (8 bits, also H) both decode the same. You can mix widths in the same input.