Skip to content
Ghostchars

Line separators

LINE SEPARATOR (U+2028)

Unicode’s own "new line here" character, distinct from the ASCII line feed. It ends a line without ending a paragraph.

Codepoint
U+2028
Removed by default
No
Governing option
Line endings -n
Can be load-bearing
No

Where it comes from

Shift+Enter in most word processors and page-layout tools, and from anything that exports from them. macOS text editors and InDesign are prolific sources.

Why it matters

It is a line break that most line-oriented software does not recognise. Files split into the wrong number of lines, CSV rows merge, and — famously — a raw U+2028 inside a JavaScript string literal used to be a syntax error, which broke JSON embedded in HTML.

Before and after

BeforefirstU+2028second
Afterfirst second

A line break your text editor may not count as one.

The character is shown as a labelled chip so you can see where it sits. In your text it draws nothing at all.

When it is legitimate

Inside a paragraph that genuinely needs a soft line break, in software that understands it. In plain text a line feed is safer and means the same thing to a reader.

How to remove it

Turn on Line endings (`-n`) and it is folded to a plain LF, along with CRLF, CR, NEL and U+2029.

Is it an AI watermark?

Not a watermark

No. It comes from word processors and layout tools. Finding one tells you the text passed through a rich text editor.

No connection to machine-generated text. It comes from software, from a keyboard, or from a person.

Questions

Why did it break my JavaScript?

Before ES2019, U+2028 and U+2029 were not allowed unescaped in string literals, so JSON embedded directly in a script tag could fail to parse. Modern engines allow them; older ones and many tools still do not.

Why is it not folded by default?

Because changing line endings changes the file. That should be a decision you make, not one a cleaner makes for you.

Check your own text

Paste anything into the cleaner to see every hidden character it contains, with position, codepoint and what happens to each one. Nothing is uploaded.

Check your own textAll characters