Smart ↔ Straight Quote Converter
Convert between straight (") and typographic / curly (“ ”) quotes — and back — with locale-aware styles.
“Knowledge is power” — Bacon’s old line, and it’s still true today. She said ‘hi’ to me.
The apostrophe rule (it's, world's) is a heuristic — review the output if your text has unusual punctuation.
How to use
- Pick a direction: To Smart (publishing) or To Straight (code / data).
- When going to Smart, choose the language so the right style is used.
- Paste text in the input — the output updates as you type.
About this tool
ShowHide
Turns "plain" and 'plain' quotes into proper typographic ones (“fancy”, ‘fancy’) — or the reverse, to make text safe to paste into code, JSON, or CLI commands. Apostrophes inside words (it's) are detected and emitted as the closing single quote, not an opening one. Style follows the chosen language: English curly, French guillemets « », or German low-9 „ “.
The apostrophe is the case that catches naive implementations, because the same character does two unrelated jobs. In it's and '90s it is a letter-level mark and should be the right single quote, while in 'quoted' it opens and closes. Alternating opener and closer through the text gets it's wrong every time, and the result is a document where every contraction leans the wrong way. The rule here is positional: a mark between two letters is an apostrophe.
Going the other way is the direction that matters for correctness rather than looks. A curly quote pasted into a shell, a JSON file or a source listing is not a quote character at all, so a command silently fails to parse, a config file throws a syntax error at a line that looks perfect, and a copied code sample does not run. Word processors and messaging apps apply this substitution automatically, which is how the characters get into the text in the first place.
Conventions differ by more than the glyph shape. French guillemets take a space inside them, traditionally a non-breaking thin space, and German uses a low opening mark with the pair reading as „so“. A document that switches language mid-way needs the quotes to switch too, and a single pass over the whole file in one style will leave the other language wrong.
Nothing here understands nested quotes or attribution. A quote inside a quote should alternate between double and single by the house style, and this substitutes what it finds rather than tracking depth, so a passage with quotations inside dialogue is worth reading after conversion.
Frequently asked questions
Why are smart quotes a problem in code?
JavaScript, Python, JSON, shell, and SQL all expect ASCII " and '. When you copy text from Word, Notion, or many CMSes it brings curly quotes along, which then break string literals with a confusing parse error. Round-tripping through this tool fixes it.
How does it know an apostrophe vs. a closing single quote?
When a ' sits between two letters (don't, world's), it's almost always an apostrophe and gets the closing single quote glyph. Outside that pattern, the tool alternates open / close like a regular quotation.
What's special about French and German styles?
French uses guillemets with non-breaking inner spaces (« hello »). German uses low-9 open and high-9 close („hello“). Both are correctly emitted; the straight-quote inverse strips the extra spacing back out.
How does a curly apostrophe break a search or a filter?
The two forms are different characters, so a query typed with a straight apostrophe does not match text stored with a curly one. Names are where this hurts — a customer record written as O'Brien with a typographic apostrophe will not be found by someone typing the same name on a plain keyboard. Normalise on input rather than hoping the two spellings meet.
Where should the conversion happen in a publishing pipeline?
As late as possible, and never twice. Convert when rendering for readers, not when storing the text, so the source stays plain and searchable and a second pass cannot turn an already-curly quote into something odder. Anything that will be read by a machine — a config value, a code sample, a command in documentation — should be exempt from the pass entirely.
Related tools
Random Quote Generator
Draw a random quotation from a hand-checked collection, each shown with the book, speech or letter it comes from, and copy it with one click.
Random
Mojibake Fixer (Repair Garbled UTF-8)
Repair text mangled by a wrong-encoding round-trip — turn café and don’t back into café and don't, automatically and in your browser.
Text
Tabs to Spaces Converter (and back)
Convert leading indentation between tabs and spaces with a configurable tab width, in your browser.
Text
Morse Code Translator
Convert text to and from international Morse code. Supports A-Z, 0-9, punctuation. Customizable letter and word separators.
Text
Soundex Phonetic Code Generator
Generate the American Soundex code for names or words — a 4-character phonetic key that groups similar-sounding spellings together.
Text
Case Converter
Convert text between UPPER, lower, Title, camelCase, snake_case and more.
Text