Text to octal converter
Hello becomes 110 145 154 154 157: each UTF-8 byte is written as a three-digit octal group. Pick spaces, colons, commas, pipes or no separator at all, and turn an octal dump back into text the same way. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Text
- Hello
- Calculation mode
- Encode
- Separator
- Space
- Result
- 110 145 154 154 157
- Length
- 19
- Byte count
- 5
- Encoding
- utf-8
A text to octal converter turns ordinary characters into the base-eight digits that represent each UTF-8 byte, and can reverse the same dump back into readable text. Engineers, students, and reverse-engineering learners still meet octal in legacy dumps, C escape sequences, permission teaching materials, and protocol traces where three-digit groups per byte stay easy to scan by hand. Encode mode reads your string as UTF-8, maps every byte to a zero-padded three-digit octal value, and joins those groups with the separator you choose—space, packed with no delimiter, colon, comma, or pipe. Decode mode splits the dump the same way, checks that every digit is in the range zero through seven, rebuilds the byte sequence, and returns UTF-8 text.
How text becomes per-byte octal (and back)
Octal is base eight: each digit is one of zero through seven, and three octal digits cover exactly one eight-bit byte because eight cubed is five hundred twelve, which is larger than two hundred fifty-five. Encoding therefore starts from raw bytes rather than from Unicode code points alone. This capability first converts your input string with UTF-8 so multi-byte characters stay portable across languages and platforms.
Each resulting byte from zero to two hundred fifty-five is written as a three-digit octal triple with leading zeros, so the letter H (decimal seventy-two) becomes one one zero, lowercase e becomes one four five, and so on. Decoding reverses the path. The input is split according to the same separator rule; when the separator is none, whitespace is stripped and the remaining body must have a length that is a multiple of three so each fixed triple is unambiguous.
Every token is then checked character by character: only the digits zero through seven are legal. Each valid token is interpreted as base eight and must fit in a single byte (at most three seven seven octal). The recovered bytes are decoded as UTF-8 text.
Where text-to-octal conversion shows up in real work
Systems courses still assign exercises that print character dumps in octal so students can relate ASCII tables, byte boundaries, and multi-byte UTF-8 sequences without jumping straight to hexadecimal. Firmware and protocol reverse-engineering sessions often leave octal fragments in old logs, serial captures, or documentation that predates widespread hex tooling, and engineers need a strict decoder that refuses illegal digits instead of inventing values.
Curriculum authors teaching number bases want a dedicated text landing that demonstrates per-byte encoding rather than burying the idea under a generic integer radix converter, because the search phrases and the mental model differ. Support desks and security reviewers sometimes receive pasted octal blobs from tickets and need whitespace-tolerant space-separated decoding without accepting eights and nines that would produce a wrong password or token.
If you need whole-integer conversion among binary, octal, decimal, and hex, Base32 secrets, URL percent-encoding, or chmod rwx to octal permissions, treat those as separate search intents and landings rather than overloading this text to octal converter page.
What you can do with it
Classroom UTF-8 and ASCII octal dumps
Show each character as zero-padded three-digit octal bytes so students can map text, UTF-8 multi-byte sequences, and base-eight digits in one exercise.
Legacy log and protocol paste recovery
Decode space- or colon-separated octal dumps from old traces back to UTF-8 text, failing loudly when a digit eight or nine appears.
FAQ
What does this text to octal converter do?
It encodes UTF-8 text as per-byte three-digit octal groups (or decodes such a dump back to text). You choose the mode and the separator between groups.
Can I both encode and decode?
Yes. Set mode to encode (default) to turn plain UTF-8 text into octal, or mode to decode to recover text from an octal byte dump.
What separators are supported?
space (default), none (packed three-digit groups), colon, comma, and pipe. Encode joins groups with that delimiter; decode splits with the same rule.
What does it cost?
The browser tool is free and runs locally.
Why does every byte take exactly three octal digits?
Three octal digits are enough for any single byte, so every byte is written as a zero-padded triple, such as 110 for the letter H. That fixed width means even a packed dump with no separator can be split without guessing.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/enc/octal-text \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello"}'const res = await fetch("https://api.kit.forhosting.com/enc/octal-text", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/octal-text",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/octal-text", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/octal-text", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "Hello"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.octal_text",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Any digit eight or nine fails immediately with invalid_input so a mistyped paste never silently becomes a wrong string.
How text becomes per-byte octal (and back)
Those triples are joined with your separator: a space for classic dumps, nothing for a packed stream of digits, a colon for log-friendly fields, a comma for spreadsheet pastes, or a pipe for shell-friendly lists. The digits eight and nine are rejected with a clear invalid_input message that names the token index and the offending digit outside zero through seven. The entire path is deterministic integer work with no network, no random seeds, and no wall-clock timestamps, so identical inputs always produce identical JSON. This page is about text and byte dumps, not about rewriting one large integer from decimal into octal; integer radix conversion is a different search intent and a different tool.
What you send and what you get back
Send a required string field named text, an optional mode field set to encode or decode, and an optional separator field set to space, none, colon, comma, or pipe. When separator is omitted, space is the default for readable dumps. Encode mode treats text as plain UTF-8 content and returns a result string of octal triples joined by the chosen delimiter. Decode mode treats text as an octal dump, validates every digit, and returns the recovered UTF-8 string in result. Classic checks include encoding Hello to one one zero, one four five, one five four, one five four, one five seven with space separators, decoding that same dump back to Hello, encoding Hi with colon separators, and rejecting a token that contains the digit eight. When mode is omitted, encode is the default so a single payload still does useful work. Both directions echo mode, the original text, result, the normalized separator keyword, a length field for the primary output string, byte_count for the UTF-8 byte length, encoding set to utf-8, base set to eight, and digit_width set to three so clients can assert which profile they hit. Missing text, non-string objects, unsupported mode or separator values, strings longer than the documented maximum, empty tokens, tokens longer than three digits, values above one byte, digits outside zero through seven, packed bodies whose length is not a multiple of three, or bytes that are not valid UTF-8 all fail with invalid_input and a clear English message. Validation failures do not consume prepaid balance. Pricing for successful API calls is the published base of $0.002 per item.
Where text-to-octal conversion shows up in real work
Product teams documenting legacy file formats that store printable octal fields can generate examples for manuals from the same function the public API exposes. Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Integration use cases
Cross-tool golden fixtures for dump formats
Generate encode and decode fixtures with a fixed separator so multi-language CI agrees on the same per-byte octal representation.
Technical questions
Which digits are allowed when decoding?
Only digits 0 through 7. Any digit 8 or 9 (or other non-octal character in a token) fails with invalid_input and a message that names the digit outside 0-7.