Font Converter

Free Unicode Range Generator – CSS unicode-range for @font-face

Unicode Range Generator

Generate unicode-range values for font subsetting

Preset ScriptsCustom RangesCSS Export

Preset Scripts

Tip: Click a preset to add its Unicode ranges to your custom list

Custom Ranges

U+
U+

Generated Output

U+0020-U+007F
CSS Output
@font-face {
  font-family: 'YourFont';
  src: url('your-font.woff2') format('woff2');
  unicode-range: U+0020-U+007F;
}

Common Characters Reference

CharacterNameUnicode
A-ZUppercase LatinU+0041-U+005A
a-zLowercase LatinU+0061-U+007A
0-9DigitsU+0030-U+0039
À-ÿLatin-1 AccentedU+00C0-U+00FF
А-ЯCyrillic UppercaseU+0410-U+042F
а-яCyrillic LowercaseU+0430-U+044F
Α-ΩGreek UppercaseU+0391-U+03A9
α-ωGreek LowercaseU+03B1-U+03C9

Developer & Verifier

Marcus Rodriguez

Developed by

Marcus Rodriguez

Full-stack developer specializing in web font implementation and performance optimization

Sarah Mitchell

Verified by

Sarah Mitchell

Typography expert specializing in font design, web typography, and accessibility

What is a CSS Unicode Range?

The CSS unicode-range descriptor specifies exactly which character code points a @font-face rule covers, enabling browsers to download font files only when the page contains characters within that range. Unicode 16.0 defines over 154,000 characters across hundreds of scripts. Without unicode-range, browsers download entire font files regardless of which characters appear on the page.

Latin fonts typically use 100–1,000 glyphs, while CJK fonts require 10,000+ glyphs for basic coverage. The OpenType specification limits each font file to a maximum of 65,535 glyphs. Declaring unicode-range in @font-face triggers conditional font downloading: browsers evaluate which code points exist in the page content and fetch only the matching font files. This is particularly powerful for CJK font optimization, where splitting a single large font into multiple unicode-range subsets can reduce initial download size by over 90%.

Coordinate unicode-range with font subsetting for maximum file size reduction: subset the font file to remove unused glyphs AND declare unicode-range to prevent unnecessary downloads. The median WOFF2 Latin font measures 12–19 KB (phpied.com analysis of 1,074 Google Fonts), but CJK fonts without subsetting reach 1–5 MB.

Language-specific subsetting guides cover Chinese, Japanese, Korean, Latin, Arabic, and Cyrillic character sets with recommended unicode-range values for each script.

Select from 19 preset Unicode blocks covering Latin, Cyrillic, Greek, CJK, Arabic, Hebrew, Thai, emoji, and more. You can also build custom ranges by entering hexadecimal start and end code points. The reference table lists 8 common character sets with their exact Unicode boundaries. Output includes the unicode-range value string and a complete @font-face CSS declaration with the unicode-range property ready for your stylesheet. Combine unicode-range with @font-face optimization techniques such as preload hints and font-display settings for maximum loading performance.

How to Use This Generator

1

Select Character Sets

Choose from preset language and script ranges like Latin, Cyrillic, Greek, Arabic, or CJK.

2

Add Custom Ranges

Optionally define specific Unicode ranges using hexadecimal notation for precise control.

3

Preview Characters

See a visual display of the characters included in your selected ranges.

4

Copy CSS

Copy the generated unicode-range CSS output to use in your @font-face declarations.

Features

Character Set Selection
Unicode Range Output
Visual Character Preview
Common Language Presets
Custom Range Input
Copy CSS Output
File-Based Generation
Glyphs Display

Common Unicode Ranges

ScriptUnicode RangeCharactersCommon Languages
Basic LatinU+0020-007E95English (ASCII)
Latin-1 SupplementU+00A0-00FF96French German Spanish
Latin Extended-AU+0100-017F128Czech Polish Turkish
CyrillicU+0400-04FF256Russian Ukrainian Bulgarian
GreekU+0370-03FF135Greek
CJK UnifiedU+4E00-9FFF20992Chinese Japanese Korean
DevanagariU+0900-097F128Hindi Sanskrit

Frequently Asked Questions

What is CSS unicode-range?
The unicode-range descriptor in @font-face tells the browser which Unicode characters a font covers. The browser only downloads the font file when characters on the page fall within the specified range, improving performance.
How does unicode-range improve performance?
By splitting a font into subsets with unicode-range, the browser only downloads the subsets needed for the current page content. A page with only Latin text won't download CJK or Cyrillic font subsets.
How do I write unicode-range syntax?
Use U+ followed by hex code points: single character (U+0041 for "A"), range (U+0020-007E for Basic Latin), or wildcard (U+4?? for U+0400-04FF). Separate multiple ranges with commas.
What are wildcard ranges?
Wildcard ranges use ? to match any hex digit. U+4?? matches U+0400 through U+04FF (256 characters). U+00?? matches U+0000 through U+00FF. This is a shorthand for common Unicode blocks.
How do I find which characters are in a font?
Use our Font Analyzer tool to inspect a font file's Unicode coverage. It shows all supported character ranges, letting you create precise unicode-range values for your @font-face rules.
What are common unicode-range values for different languages?
Basic Latin: U+0020-007E; Latin Extended: U+0100-024F; Cyrillic: U+0400-04FF; Greek: U+0370-03FF; CJK Unified: U+4E00-9FFF. This tool provides presets for all major languages.

Related Tools & Guides