Letras Diferentes
Unicode research · Double-struck and Fraktur

Double-Struck and Fraktur Unicode Characters: Mathematical Identity, Gaps and Glyphs

Detailed Unicode reference for blackboard bold, Fraktur and bold Fraktur letter repertoires, BMP exceptions, mathematical semantics, compatibility folding and reliable code-point maps.

Technical referenceUnicode baseline: 18.0.0

Double-struck and Fraktur are encoded mathematical alphabets

Double-struck letters (often informally called blackboard bold) and Fraktur letters are specialized mathematical letter symbols. A capital letter drawn with double vertical strokes may denote a number set, while Fraktur letters are used in some algebraic and analytic notation. Unicode encodes these mathematical alphabet forms as distinct characters to preserve symbolic distinctions in plain-text interchange. These are not merely font settings: U+0043 C LATIN CAPITAL LETTER C and U+2102 ℂ DOUBLE-STRUCK CAPITAL C are different code points with different names and mathematical uses.

Unicode's general policy prefers ordinary letters with typographic markup for ordinary prose. Mathematical alphanumeric symbols are an exception because the alphabet style may identify a different variable. A double-struck symbol's mathematical meaning is not fixed universally—for example, ℂ conventionally denotes complex numbers, but authors can choose other definitions. Unicode provides the character identity, not a mathematical type system.

Common styled-text generators reuse these alphabets as decoration. That produces copyable Unicode symbols rather than a true custom font. The result may be portable across plain-text fields at the code-point level, but font coverage, normalization and assistive technology determine whether the user experience survives unchanged.

Important distinction: Mathematical Fraktur code points are not the same thing as choosing a blackletter font for regular Latin text. The Unicode characters carry the mathematical alphabet identity even when rendered in a fallback typeface.

Repertoire and verified code-point examples

The primary ranges sit in the Mathematical Alphanumeric Symbols block, U+1D400..U+1D7FF. Fraktur uppercase A begins at U+1D504; Fraktur lowercase a at U+1D51E. Double-struck uppercase A begins at U+1D538; lowercase a at U+1D552. Bold Fraktur uppercase A begins at U+1D56C. Their uppercase alphabets appear in nearly consecutive mathematical runs, but several characters were already encoded in the BMP and are represented by deliberate holes.

CharacterCode pointUnicode name
𝔄U+1D504MATHEMATICAL FRAKTUR CAPITAL A
𝔞U+1D51EMATHEMATICAL FRAKTUR SMALL A
𝕬U+1D56CMATHEMATICAL BOLD FRAKTUR CAPITAL A
𝔸U+1D538MATHEMATICAL DOUBLE-STRUCK CAPITAL A
𝕒U+1D552MATHEMATICAL DOUBLE-STRUCK SMALL A
ℂU+2102DOUBLE-STRUCK CAPITAL C
ℌU+210CBLACK-LETTER CAPITAL H
ℜU+211CBLACK-LETTER CAPITAL R
𝟘U+1D7D8MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO

Double-struck decimal digits form a separate contiguous range beginning at U+1D7D8 for zero and ending at U+1D7E1 for nine. The Fraktur alphabets do not imply a corresponding complete Fraktur digit set. The presence of multiple styled letter alphabets does not justify generating numerals or punctuation by arbitrary Unicode arithmetic.

Not every Fraktur glyph is drawn identically across math fonts. Fonts may vary stroke weight, terminals, and ornaments while targeting the same Unicode scalar. A screenshot showing a Gothic-looking capital letter is not sufficient evidence that its underlying code point belongs to the mathematical Fraktur alphabet.

Legacy black-letter and double-struck symbols

Historically encoded symbols from the BMP Letterlike Symbols block occupy certain positions of these mathematical alphabets. Unicode retained their existing code points; gaps in the supplementary alphabetic ranges avoid introducing duplicate abstract characters. The main historical exceptions relevant to uppercase Fraktur are:

Fraktur letterBMP code pointFormal legacy name
CU+212D ℭBLACK-LETTER CAPITAL C
HU+210C ℌBLACK-LETTER CAPITAL H
IU+2111 ℑBLACK-LETTER CAPITAL I
RU+211C ℜBLACK-LETTER CAPITAL R
ZU+2128 ℨBLACK-LETTER CAPITAL Z

For double-struck uppercase letters, the preexisting BMP exceptions include U+2102 ℂ (C), U+210D ℍ (H), U+2115 ℕ (N), U+2119 ℙ (P), U+211A ℚ (Q), U+211D ℝ (R), and U+2124 ℤ (Z). They are valid, standard members of the mathematical double-struck alphabet, even though they are not in the supplementary block.

Consequently, the algorithm 0x1D538 + (letter - 'A') fails for double-struck C, and 0x1D504 + (letter - 'A') fails for Fraktur C. Some invalid results fall in unassigned holes that a font may render as boxes. Adding a fallback glyph based only on appearance could silently change the letter's identity.

These historical exceptions are further discussed in our mathematical alphanumeric repertoire reference, including how the repertoire differs from a conventional complete font.

Mathematics, historical typography and Unicode intent

In mathematical prose, a double-struck symbol can distinguish a recognized number domain such as ℕ, ℤ, ℚ, ℝ, or ℂ. Fraktur may distinguish Lie algebras, ideals, or other symbolic objects according to the author's convention. Unicode does not mandate these meanings, nor does it require a particular typeface outline for mathematical letterforms.

Historical blackletter fonts have a far wider repertoire of stylistic letters, ligatures and conventions than the mathematical Fraktur alphabet alone. The script used by the author and the font used for the page may be unrelated to which Unicode mathematical character was encoded. A Unicode “Fraktur converter” does not turn English text into a different language, and replacing letters with mathematical Fraktur forms does not preserve historical typesetting conventions of German blackletter documents.

Unicode favors markup or font selection where font-style differences are purely presentational. If a webpage needs a decorative blackletter heading, an accessible solution is typically ordinary letters with a suitable CSS font. If a plain-text message needs to carry the encoded mathematical Fraktur symbol itself, the mathematical character repertoire is applicable—with clear limitations for accessibility and interoperability.

Reliable encoding and decoding strategies

Use an explicit dictionary of known BMP exceptions plus verified continuous runs for the remaining letters, or use a completely explicit 26-character mapping table. Parsing UCD names and compatibility decompositions can help generate and verify the table, but do not infer assignment from numeric proximity alone.

// Narrow uppercase double-struck converter with exceptions.
const doubleStruckBMP = new Map([
  ["C", 0x2102], ["H", 0x210D], ["N", 0x2115],
  ["P", 0x2119], ["Q", 0x211A], ["R", 0x211D],
  ["Z", 0x2124]
]);
function toDoubleStruckUpper(text) {
  return [...text].map(ch => {
    if (!/^[A-Z]$/.test(ch)) return ch;
    const cp = doubleStruckBMP.get(ch) ??
      (0x1D538 + ch.codePointAt(0) - 0x41);
    return String.fromCodePoint(cp);
  }).join("");
}
console.log(toDoubleStruckUpper("CNR"));
// ℂℕℝ
console.log([...toDoubleStruckUpper("AZ")].map(
  c => c.codePointAt(0).toString(16).toUpperCase()
));
// ["1D538", "2124"]

This converter intentionally leaves lowercase and punctuation unchanged. A production implementation can add separately validated lowercase and digit maps. For the Fraktur uppercase alphabet, use its five corresponding BMP exceptions; a blind arithmetic mapping is not correct.

Reverse folding is not lossless. Both Fraktur C and double-struck C have a compatibility relation to ordinary C, so converting them back to C discards their original mathematical style and meaning. To round-trip a user-editable design, store the original style selection or the exact original Unicode sequence.

The Fancy Text tool is an appropriate way to inspect the difference between ordinary and copyable mathematical-styled symbols, but correctness should be verified by copying code points—not by treating visually matching typefaces as identical encodings.

Normalization and comparison behavior

NFC/NFD are canonical forms and normally preserve these mathematical letter characters. Compatibility normalization forms, particularly NFKC, map mathematical alphabets to ordinary letters or digits. This is explicitly described in Unicode Standard Annex #15, which warns that compatibility equivalence can erase mathematically significant distinctions.

const examples = ["\u2102", "\u212D", "\u{1D538}", "\u{1D7D8}"];
console.log(examples.map(ch => [
  ch.codePointAt(0).toString(16),
  ch.normalize("NFKC")
]));
// ["2102","C"], ["212d","C"],
// ["1d538","A"], ["1d7d8","0"]

Even when folded values match, they are not canonically equivalent; their original bytes and code points remain different until a compatibility transform occurs. Normalizing all stored mathematical expressions to NFKC would conflate symbols that were deliberately distinct. For search or identifier validation, consider deriving an auxiliary compatibility-folded key while preserving source text if the semantics require it.

Glyph coverage, accessibility and security

Font fallback remains a practical problem: a general Latin font can lack Fraktur or double-struck glyphs, and math fonts use their own stylistic designs. If the receiving app lacks the relevant glyph, a missing-character box may appear even though the UTF-8 data are valid. No single Unicode code point guarantees a consistent appearance across phones.

Screen readers can identify mathematical styles, announce character names, or provide a reduced reading depending on their implementation and context. In decorative prose, this often makes the text less accessible. Avoid stylized substitutions in important instructions, form labels and long explanations unless an accessible ordinary-text alternative is supplied.

In usernames and security-sensitive identifiers, a double-struck character can look like an ordinary letter while comparing differently at the code-point level. NFKC and confusable mapping are related but distinct mechanisms; a secure identifier policy should use an appropriate Unicode profile and a documented comparison strategy instead of arbitrary string replacement.

Validation cases and developer pitfalls

ScenarioExpected scalar / behaviorGuard
Fraktur capital AU+1D504Start of math Fraktur run
Fraktur capital CU+212DBMP exception, not arithmetic gap
Fraktur capital RU+211CBMP exception
Double-struck capital AU+1D538Supplementary scalar
Double-struck capital CU+2102BMP exception
Double-struck capital ZU+2124BMP exception
Double-struck digit zeroU+1D7D8Separate decimal style range
NFKC of ℝLatin RCompatibility fold only
UTF-16 length of 𝔄2Do not split surrogate pairs

Testing should verify code points, character names, NFKC results and actual pasted data. Test an alphabet's first, last and historical-hole positions; ensure all produced values are assigned and semantically correct. Use official data from the same UCD release. Separately test visual rendering and screen-reader behavior on target platforms.

Primary Unicode and mathematics references

  1. Unicode Standard Chapter 22 — Letterlike and Mathematical Alphanumeric Symbols.
  2. Unicode Letterlike Symbols chart, U+2100..U+214F, legacy exceptions.
  3. Unicode Mathematical Alphanumeric Symbols chart, assigned supplementary symbols and holes.
  4. UAX #15 — Unicode Normalization Forms, compatibility normalization and mathematical semantic distinctions.
  5. UAX #44 — Unicode Character Database, names and decompositions.
  6. UTR #25 — Unicode Support for Mathematics, technical math representation.

Independent Unicode reference; mathematical conventions are contextual and rendering depends on font support.