Convert octal to text

Paste any octal stream and get the matching text back. The octal to text converter splits the input on whitespace, parses each chunk as a base-8 number, and emits the matching character via String.fromCharCode. Three-digit chunks are the common form, but the decoder accepts any width that the parser can read. The transform runs in your browser; nothing uploads.

Input
Line 1:1 LF cloud_done Saved locally
Result Octal to Text
0 lines 0 chars

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

  1. 1Paste an octal stream into the input panel on the left.
  2. 2The decoded text appears in the output panel on the right as you type.
  3. 3Click Copy in the output header to copy the result.
  4. 4Click Download to save the result as a plain-text file.
  5. 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 FOpen the find & replace panel inside the input Plus
Ctrl ZUndo the last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor Plus
EscClose find & replace, or exit fullscreen
Ctrl KOpen the command palette to jump to any tool Plus
Ctrl SSave current workflow draft Plus
Ctrl PRun 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.

Input
110 145 154 154 157
Output
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?
It accepts the input, but it cannot guess the chunk width. A continuous stream like 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?
Whatever your input gives it. The decoder splits on whitespace and parses each chunk independently. Three digits is the common form for byte-sized characters since 255 octal is 377. Shorter chunks decode low code points; longer chunks decode higher values.
Why does the output read [invalid octal]?
A chunk in the input contains a digit outside 0 through 7 (so an 8 or a 9), or a non-digit character, after whitespace is stripped. Look for stray digits, hex characters, or punctuation in the source. The output refreshes the moment the input is valid octal again.
Is the octal sent anywhere?
No. The decode runs entirely in your browser via JavaScript. Nothing is uploaded, nothing is logged, no record of your text exists on our servers.
How do I go the other way?
Paste your text into text to octal. That tool converts each character to its octal char code, with toggles for three-digit padding and inter-chunk spacing.