Why symbols showing as boxes happen and how to fix them

If you see symbols showing as boxes (often called tofu □ or replacement characters), your device or browser is missing a font that supports that specific Unicode code point. Here is how glyph fallback works, why encoding mismatches happen, and how to fix missing characters.

By Sudarshan BabarUpdated 3 min read

What is "tofu" and why does it appear?

In digital typography, an empty rectangular box (□) displayed in place of a character is universally known as tofu, named for its resemblance to a white block of soybean curd. Google even named its universal font family “Noto” as shorthand for “No more tofu”.

Tofu occurs when software receives a valid numerical Unicode code point (such as U+1F9E1 for an orange heart), but none of the installed fonts on the operating system contain an actual visual drawing (glyph) for that specific number. Instead of failing silently or crashing, font rendering engines display the font’s default .notdef (not defined) glyph, which is typically a hollow box or a box containing an X or a question mark.

Tofu (□) vs the Replacement Character ()

It is important to diagnose which broken character symbol you are seeing, as they signal two completely different technical issues:

AppearanceNameRoot CauseHow to Fix
□ or ⯐Tofu (.notdef)Font missing the character glyphInstall a supporting font or update OS
Replacement Character (U+FFFD)File encoding corruption (bad bytes)Re-save file as proper UTF-8
’ or éMojibakeUTF-8 decoded as Windows-1252 / ISO-8859Fix web server HTTP charset header

If you see the black diamond with a question mark (), the problem is not a missing font. The underlying byte sequence was corrupted or misread by an application during file transfer or database storage. Learn more about byte architecture in our guide on UTF-8 explained.

1. Unicode version lag on older devices

The most common cause of tofu today is the annual release schedule of the Unicode Consortium. Every September, Unicode introduces thousands of new characters and emojis. For instance, Unicode 15.0 and 16.0 added new animals, symbols, and flags.

However, new characters do not appear on your screen until Apple, Google, and Microsoft issue system software updates that contain updated font files. If someone sends an iPhone message containing a brand-new emoji to an older Android phone or an outdated Windows 10 PC, the receiving system has no glyph for that code point and renders tofu.

Updating your phone's operating system (iOS or Android) or installing the latest Windows updates usually resolves recent emoji and symbol tofu immediately.

2. How operating system font fallback works

No single font file contains all 154,998 Unicode characters. Operating systems use a mechanism called font fallback to assemble text seamlessly:

  1. The application checks your active document font (for example, Georgia or Calibri).
  2. If Georgia lacks the character (such as the Greek letter Ω or arrow →), the rendering engine passes the request down a system fallback chain.
  3. On Windows, the system checks Segoe UI Symbol or Segoe UI Emoji. On macOS, it checks Apple Symbols or Apple Color Emoji.
  4. If every font in the fallback chain lacks the glyph, the engine finally gives up and draws the hollow box (.notdef).

Learn how code points are mapped across blocks and planes in our foundational guide on what is Unicode.

3. How end users can fix missing characters

If you regularly work with technical notation, foreign alphabets, or historical scripts and see boxes everywhere, you can eliminate tofu by installing broad multilingual fonts:

  • Google Noto Fonts: Download Google's free Noto font family, which aims to provide complete coverage for every script and symbol in the Unicode standard.
  • Symbola Font: George Douros’s Symbola font provides extensive coverage for obscure historical scripts, ancient symbols, and technical dingbats.
  • Character identification: If you see a mysterious tofu box, copy it and paste it into our Unicode character lookup tool. SymbolHub will immediately decode the numerical code point, reveal its official name, and tell you which Unicode version introduced it.

4. How web designers and developers prevent tofu

Web developers can prevent symbols from showing as boxes for their website visitors by adhering to three best practices:

  1. Always specify UTF-8: Include <meta charset="UTF-8"> as the very first line inside your HTML <head> block to prevent encoding misinterpretation.
  2. Include system fallback fonts in CSS: Never write font-family: 'MyCustomFont'; alone. Always append robust system fallbacks: font-family: 'MyCustomFont', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Segoe UI Emoji', sans-serif;.
  3. Use unicode-range for custom web fonts: When serving custom icon fonts, declare the unicode-range descriptor in your @font-face rule so browsers only download glyphs when those specific characters appear on the page.

For more details on glyph styling, explore our companion article comparing emoji vs text symbols.

Frequently asked questions

Why do some symbols show up as blank squares on my computer?

Blank squares (tofu) appear when your installed fonts lack the visual drawing for that specific Unicode character, commonly because the character was added in a recent Unicode update.

What does the question mark in a black diamond () mean?

U+FFFD is the replacement character. It indicates that the text file suffered character encoding corruption (e.g. invalid UTF-8 byte sequences).

How do I identify a character that shows as a box?

Copy the box and paste it into SymbolHub’s Unicode Character Lookup. Even if your device cannot draw the picture, the numerical code point remains intact and can be identified.

How do I get new emojis that show as boxes on my phone?

Update your phone to the newest version of iOS or Android. Apple and Google bundle updated emoji font files with their major system updates.

Sources

  1. Unicode Consortium: Display Issues FAQ
  2. Google Noto Project: Beautiful fonts for all languages
  3. W3C Internationalization: Character encodings for beginners