About Roman Numeral Eight
Roman Numeral Eight is the Unicode character Ⅷ at codepoint U+2167 in the Number Forms block of the Basic Multilingual Plane (BMP).
Reference
One precomposed Roman numeral, not the letters V I I I typed in a row. U+2167 lives in Number Forms with general category Nl — Letter Number — and a compatibility decomposition into the four Latin capitals, so NFKD and NFKC replace it with VIII. Every one of the thirty-two Roman numerals from U+2160 to U+217F is built this way; the whole run is compatibility characters, encoded for round-tripping legacy East Asian data rather than for setting prose. Its numeric value is recorded as 8, but its category is not Nd, which is why a digit test and a numeric test disagree about it. East Asian Width is Ambiguous, so its advance width is decided by the surrounding font context.
Typical uses
- Round-tripping data from East Asian standards that encoded Roman numerals as single characters
- Vertical CJK text, where one numeral has to occupy one fixed-width cell
- Nothing in ordinary Latin prose — the standard's own advice there is to type the letters
At a glance
- U+2167, Number Forms; Unicode 1.1 (1993); general category Nl
- Compatibility decomposition 0056 0049 0049 0049 — NFKD gives VIII
- All thirty-two numerals U+2160 to U+217F carry compatibility decompositions
- Numeric value 8, but not a decimal digit
- East Asian Width Ambiguous; line break class AI; no HTML named entity
Historical Notes
Origins
Roman numerals as a notation are far older than any encoding of them, and the history belongs to the numerals rather than to this character. What the character data records is narrower and checkable: Unicode did not invent a single-cell numeral, it inherited one.
Unicode
Present since Unicode 1.1, released in 1993, in Number Forms. Sixty codepoints in that block are assigned and thirty-two of them carry compatibility decompositions — the Roman numerals, upper and lower case. A compatibility decomposition is Unicode's way of saying that a character exists for round-tripping rather than for composing new text, and it applies to the entire run rather than to this one member.
Why a single cell
The Japanese Wikipedia article on Roman numerals tabulates these characters against JIS row-cell positions, which is the shape of the compatibility case: a legacy standard had encoded the numeral as one unit, and Unicode had to be able to convert to it and back without loss. The typographic reason usually given alongside it — that vertical CJK setting wants one numeral in one square cell — is the received explanation rather than something verified at a primary source.
Developer Notes
| Unicode Codepoint | |
| Decimal | |
| UTF-8 (hex) | |
| UTF-16 (hex) | |
| HEX Entity | |
| HTML Entity | |
| CSS (\xxxx) | |
| JavaScript | |
| Python |
How to Use Roman Numeral Eight
To use the Roman Numeral Eight symbol (Ⅷ) in HTML, insert the
entity Ⅷ directly into your markup. The decimal entity Ⅷ works in any HTML-serialised document.
In CSS pseudo-elements use content: '\2167';.
In JavaScript and TypeScript the escape '\u2167' evaluates to Ⅷ. In Python source, write '\u2167'.
The character encodes to E2 85 A7 as UTF-8 bytes and 2167 as UTF-16 code units. Its decimal codepoint is 8551.
This is a text-based Unicode character. It will render in the current font on most platforms. If a font lacks this glyph, the browser may show a placeholder or fall back to a system font.
Things to know
- NFKD and NFKC replace it with the four letters V I I I. A normalising search index stores VIII, so the character and the letters are the same entry there and different entries everywhere else.
- Without normalisation they are different data. A spreadsheet formula matching "VIII" will not match this character, and sorting puts them far apart.
- General category Nl, not Nd. In Python 3 `isdigit()` returns False, `isnumeric()` returns True, `unicodedata.numeric` returns 8.0, a regular expression `\d` does not match it and `\w` does.
- East Asian Width Ambiguous, so it renders full-width in a CJK font context and half-width elsewhere — the same codepoint with two advance widths, decided by the environment.
- No named HTML entity. Write Ⅷ or Ⅷ.
- Not an emoji and carrying no emoji property.
In the Wild
On 5 August 2026 the Chinese Wikipedia article about Roman numerals carried it three times in running text, setting its worked examples and its whole numeral-to-Latin table in the precomposed characters rather than in Latin letters: "左減數字必須為一位,比如8是Ⅷ". It appears once more on the Japanese article, in a table mapping each numeral to its JIS row-cell position, and twice as code-chart cells on the English Number Forms article.
The English article on Roman numerals — 72,616 characters — contains not one of them. It writes its numerals as Latin capitals throughout.
That split is the character doing exactly the job it was encoded for and nothing else. Pages change; this is what those showed on the day.
FAQ
Is it different from typing V, I, I, I?
Yes, as data. It is one codepoint rather than four, so exact-match search, sorting and string length all see something different — unless the text has been normalised, in which case it has already become the four letters.
Should I use it in ordinary prose?
Unicode encodes it as a compatibility character, which is the standard's way of marking something as being there for conversion rather than for composition. Latin letters are what most readers' software renders best.
Why does it change width?
Its East Asian Width is Ambiguous. In a Japanese or Chinese font context it takes a full-width cell; elsewhere it does not.
Is there an HTML entity?
No named one. Use Ⅷ or Ⅷ.