Octal to text, plain and predictable
Octal to text decoding takes a string of base-8 digits, splits it on any run of whitespace, and reads each chunk as an octal integer. Each integer becomes a single character via the browser native String.fromCharCode. The standard width is three digits per character (one byte, range 0 through 255 = 377 octal), but the decoder accepts shorter or longer chunks: a one-digit chunk decodes a low code point, a six-digit chunk decodes a value in the upper Basic Multilingual Plane.
Whitespace is the chunk delimiter. Spaces, tabs and newlines all behave the same. Continuous streams without spaces are also accepted as a single chunk, which produces one character with the full numeric value. If a chunk contains a digit outside 0 through 7, the parse fails and the output panel shows [invalid octal] 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 octal. If you want hex instead, see hex to text; for binary, see binary to text.
How to use convert octal to text
- 1Paste an octal 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 octal], check that every chunk contains only digits 0 through 7.
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.
Char codes via String.fromCharCode
Each chunk parses with parseInt(chunk, 8) and feeds String.fromCharCode. So 110 octal becomes char code 72, which is H. Values 0 through 65535 decode to a UTF-16 code unit; above-BMP characters need an explicit surrogate pair.
Variable chunk width
The decoder accepts any chunk width. Three digits is the common form for byte-sized characters. Shorter chunks decode low code points; longer chunks decode values higher in the Basic Multilingual Plane. The widths can differ between chunks in the same input.
Invalid input shows a clear marker
If a chunk contains a digit outside 0 through 7, or any other non-digit character, the parse fails and the output panel shows [invalid octal] 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 on a desktop browser.
Worked example
Five three-digit octal chunks decode to the five characters of Hello via String.fromCharCode.
110 145 154 154 157
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. Three digits is the common form for byte-sized characters. |
| Decoder | Each chunk parses with parseInt(chunk, 8); the integer feeds String.fromCharCode. |
| Empty input | Emits an empty string. |
| Leading/trailing whitespace | Trimmed before split. |
| Invalid chunk | Output shows [invalid octal]; no partial text is emitted. |
| Above-BMP characters | Need an explicit surrogate pair; a single chunk above 65535 does not survive String.fromCharCode. |
FAQ
Does it accept input without spaces between chunks?
110145154154157 decodes as a single chunk producing one character with that very large numeric value. Re-space it first, or run a regex like (.{3}) to insert a space every three digits.What chunk width does the decoder use?
377. Shorter chunks decode low code points; longer chunks decode higher values.