Morse Code Converter
Convert between text and Morse code: letters, digits and common punctuation are encoded with spaces between letters and a slash between words. Non-table characters such as Chinese are skipped and reported instead of being approximated.
Morse code spells letters and digits with dots and dashes, and it survives as a puzzle device, an escape-room prop and a hobbyist's radio shorthand. This tool converts in both directions: letters separated by a space, words by a slash, matching the convention used on the air; going the other way it reads those spaces and slashes back into text and tolerates typographic variants such as the middle dot and the em dash.
Two boundaries are worth stating. The table covers 54 code points — 26 letters, 10 digits and 18 common punctuation marks — and anything outside it, CJK characters and emoji among them, is not approximated but skipped and listed below the result so you can check what was dropped. And nothing is guessed on decode: an unrecognisable group is reported as an error rather than turned into a plausible letter.
Did this tool solve your problem?
Submitting sends the tool name, your input and the current result to the server. Please do not include ID numbers, phone numbers or other private data.
AI assistant It answers using your current input and result
Asking again sends your current input and result to the server once more. Please do not include private data.
How to use
- Choose the direction: text to Morse, or Morse to text.
- Type or paste the input; letters are separated by spaces and words by slashes.
- Read the converted output.
- Check the list of skipped characters — anything outside the 54 code points.
How it works
Notation conventions
When encoding, letters are separated by a single space and words by " / " — the convention in amateur radio and telegraphy: SOS is ... --- ... and HELLO WORLD is .... . .-.. .-.. --- / .-- --- .-. .-.. -.. . Decoding is lenient about separators: spaces, tabs and newlines all act as letter separators, while slashes, pipes and newlines all act as word separators.
Which characters are supported
Fifty-four code points are supported: 26 letters (case-insensitive), 10 digits, and 18 punctuation marks — period, comma, question mark, apostrophe, exclamation mark, hyphen, slash, parentheses, &, colon, semicolon, equals sign, plus sign, underscore, quotation mark, dollar sign and @. Characters outside the table are never "guessed" into a near-matching code.
How off-table characters are handled
Off-table characters like Chinese are skipped and listed under the result ("hi 中文 hi" encodes just the two hi's). This isn't laziness: the international Morse table has no Chinese code points — Chinese telegraphy used a separate four-digit system ("中" = 0022) that is incompatible. When decoding, code groups with illegal lengths or patterns are likewise skipped and listed, while the rest decodes normally.
Method: the ITU-R M.1677-1 international Morse table (26 letters + 10 digits + 18 common punctuation marks, 54 code points), with a single space between letters and " / " between words. Characters outside the table are skipped and reported rather than transliterated; decoding uses the same table and skips unknown groups. Transmission timing, spacing and audio rhythm are not covered.
Code example
JavaScript A minimal encode / decode implementation
const MAP = { A: '.-', S: '...', O: '---', '1': '.----', '?': '..--..' };
const REV = Object.fromEntries(Object.entries(MAP).map(([k, v]) => [v, k]));
const encode = (s) => s.toUpperCase().split(' ')
.map((w) => [...w].map((c) => MAP[c] || '').filter(Boolean).join(' '))
.join(' / ');
const decode = (s) => s.trim().split(/\s*\/\s*/)
.map((w) => w.split(/\s+/).map((c) => REV[c] || '?').join(''))
.join(' ');
encode('SOS'); // '... --- ...'
decode('... --- ...'); // 'SOS'
Shell A one-off conversion
# Quick conversion with Python (extend the table as needed)
python3 - <<'PY'
MAP = {'S': '...', 'O': '---', '1': '.----'}
text = 'SOS 1'
print(' / '.join(' '.join(MAP.get(c, '') for c in w) for w in text.upper().split()))
PY
# Output: ... --- ... / .----
# Note: real transmissions require a license and must follow the applicable frequency and call-sign rules
FAQ
What is SOS in Morse code?
SOS is ... --- ... — three dots, three dashes, three dots. The 1906 Berlin radio-telegraph convention adopted it as the international distress signal for its simple pattern, distinctive rhythm and noise resistance — it is not an abbreviation of any three English words.
Do dots and dashes within a letter need spaces?
No — dots and dashes of one letter must run together; letters must be separated by spaces, otherwise ...---... can't be distinguished from other combinations. Words are separated by " / " by convention; this tool accepts slashes and pipes, and counts newlines as word separators too.
Why can't Chinese be converted to Morse code?
International Morse covers 26 letters, 10 digits and a little punctuation — no Chinese code points. Chinese telegraphy used the separate four-digit Chinese telegraph code ("中" = 0022), incompatible with this table. So the tool skips Chinese characters with a notice rather than transliterating through pinyin.
Does capitalization affect the result?
No. Morse has no case; this tool upper-cases everything, so HELLO and hello yield exactly the same code.
The pasted code mixes · and — — is that a problem?
Paste away. The tool normalizes "·", "•" and "․" to dots and "—", "–", "−" to dashes before decoding; the amount of whitespace doesn't matter either.
The decoder reports unknown code groups — what went wrong?
Mostly a mistyped dot/dash pattern or wrong length. The longest standard group is 6 symbols (the period .-.-.-); anything longer can't match a character. Such groups are skipped and listed while the rest decodes normally.
Does anyone still use Morse code?
Yes. Amateur radio operators use it for weak-signal communication, and aviation navaids plus some emergency beacons still identify themselves in Morse (station callsigns) — beacon identification worldwide still relies on dot-dash rhythm.
Will my input be uploaded during conversion?
No. Encoding and decoding run locally in the browser — the input never reaches a server, enters no access log, and touches no browser storage. With no history section, refreshing the page erases everything.