Cc — Control

Character Tabulation U+0009

Character Tabulation, commonly called Tab or horizontal tab, advances text to the next tab stop.

Removed by trim() — fails most name fields

1 bytes in UTF-8 · Wide · Basic Latin

Unicode properties

Codepoint
U+0009
General Category
Cc — Control
Unicode block
Basic Latin
White_Space
Yes
NFKC
Unchanged
Rendered width
Wide
UTF-8 size
1 bytes
Collapses in HTML
Yes

Encodings and escapes

UTF-8
09
UTF-16
0009
HTML decimal
	
HTML hex
	
JavaScript
"\u0009"
Python
"\u0009"
CSS content
"\0009"

What it was designed for

Indentation in source code and column alignment in plain text. Unicode assigns it to the Basic Latin block and to General Category Cc, which is Control.

In practice U+0009 is collapses in HTML exactly as a space does.

Does U+0009 work as invisible text?

No — it is removed by trim(). ItsWhite_Space property is Yes, so every standard trimming function strips it and the regex class \s matches it.

A name field that rejects an empty value rejects this character, because after trimming there is nothing left. Use U+3164 Hangul Filler or U+2800 Braille Pattern Blank instead, both of which survive.

Character Tabulation remains the correct choice for typographic spacing, where the goal is a measured gap in rendered text rather than a value that survives validation.

One further constraint applies in HTML. Character Tabulation is one of the five characters the CSS white-space processing model collapses, so consecutive runs render as a single space unless the container sets white-space: pre.

How it compares to the alternatives

Four properties decide which invisible character to use, and they separate these three cleanly. Character Tabulation is shown against the plain space and against the character most often recommended for blank names.

Character Tabulation compared with Space and Hangul Filler across the four decisive properties
PropertyU+0009U+0020U+3164
CategoryCcZsLo
Removed by trim()YesYesNo
NFKCstablestable→ U+1160
Rendered widthWideNarrowWide
UTF-8 bytes113
Works in a name fieldNoNoNo

Character Tabulation behaves like the plain space on the two properties that matter, which is why it fails wherever a space fails.

How to type U+0009

To insert U+0009, copy it from the button above. Copying is the only method that behaves identically on every operating system and in every application.

Copy and paste

Use the copy button at the top of this page. Paste into the destination field directly. If the field rejects it, paste into a plain-text editor first and copy from there — rich-text editors and some mobile keyboards rewrite pasted content.

In code

Insert it by escape sequence rather than by pasting a character no reviewer can see. A literal invisible character in a source file is unreadable in review and survives copy-paste into places it was never meant to reach.

  • JavaScript and TypeScript — "\u0009"
  • Python — "\u0009"
  • HTML — 	 or 	
  • CSS content"\0009"
  • URL encoding — %09

Keyboard entry

Keyboard methods exist and none is reliable across systems. On Linux and in most GTK applications, Ctrl+Shift+U followed by 0009 and Enter inserts the character. On macOS, the Unicode Hex Input source acceptsOption plus the four hex digits, and it must be enabled in Keyboard settings first.

Windows Alt codes do not cover this range. The Alt plus numeric-keypad method addresses legacy code pages rather than Unicode codepoints, so it cannot produce U+0009. Copying remains the dependable method on every platform.

Why U+0009 fails, and what to do

It fails when a field trims its input, which every name field and message composer does. Everything else about the character is stable, so a failure almost always traces to that one condition.

The field clears itself after saving. The value was trimmed to an empty string and the platform restored the previous one. Move to a character withWhite_Space=No — U+3164 or U+2800.

A box or question mark appears. The font has no glyph at U+0009, so the renderer drew .notdef. The stored value is correct and only the display is wrong. U+2800 has the widest font coverage of the invisible characters.

The value changes between saving and reloading. The platform normalized it. NFKC leaves Character Tabulation unchanged, so the cause is a platform-specific substitution rather than normalization.

How to find it in existing text

Match it by category rather than by codepoint. The regex\p{Cc} matches Character Tabulation and every other character in its category, and it keeps working across Unicode releases.

To confirm whether a specific string contains it, paste the string into the invisible text detector, which lists every codepoint with its category and byte length.

Frequently asked questions

01

What is U+0009?

U+0009 is Character Tabulation. Character Tabulation, commonly called Tab or horizontal tab, advances text to the next tab stop.

02

Does Character Tabulation work in a username?

No. Character Tabulation has White_Space=Yes, so trim() removes it and a field that checks for a non-empty value rejects it. Use U+3164 Hangul Filler or U+2800 Braille Pattern Blank instead.

03

How do I type U+0009?

Copy it from the button on this page. To insert it in code, use the escape sequence \u0009 in JavaScript or Python, or the HTML entity 	. On Windows, Alt codes do not reliably produce invisible characters, so copying is the dependable method.

04

How many bytes does Character Tabulation use?

1 byte in UTF-8. A field that enforces a byte limit rather than a character limit counts it as 1, so a 30-byte field holds 30 of them.

05

Where can I copy and paste Character Tabulation?

Use the copy button at the top of this page. Character Tabulation copy paste puts the single codepoint U+0009 on your clipboard with nothing attached — no leading space, no trailing newline.

06

What is the code for Character Tabulation?

The codepoint is U+0009, written as unicode 0009 in short form. In HTML it is 	 or 	, and in JavaScript or Python it is the escape \u0009.

07

Why does Character Tabulation show as a box?

The font in use has no glyph for that codepoint, so the renderer draws the .notdef glyph, which most fonts display as an empty rectangle. The character is stored correctly and only the display is wrong.

Written by , developer and writer.

Last reviewed