Crate unicode_names [] [src]

Convert between characters and their standard names.

This crate provides two functions for mapping from a char to the name given by the Unicode standard (7.0). There are no runtime requirements so this is usable with only core (this requires specifying the no_std cargo feature). The tables are heavily compressed, but still large (500KB), and still offer efficient O(1) look-ups in both directions (more precisely, O(length of name)).

extern crate unicode_names;

fn main() {
    println!("☃ is called {:?}", unicode_names::name('☃')); // SNOWMAN
    println!("{:?} is happy", unicode_names::character("white smiling face")); // ☺
    // (NB. case insensitivity)



The associated unicode_names_macros crate provides two macros for converting at compile-time, giving named literals similar to Python's "\N{...}".

  • named_char!(name) takes a single string name and creates a char literal.
  • named!(string) takes a string and replaces any \\N{name} sequences with the character with that name. NB. String escape sequences cannot be customised, so the extra backslash (or a raw string) is required.

fn main() {
    let x: char = named_char!("snowman");
    assert_eq!(x, '☃');

    let y: &str = named!("foo bar \\N{BLACK STAR} baz qux");
    assert_eq!(y, "foo bar ★ baz qux");


This package is on, so add either (or both!) of the following to your Cargo.toml.

unicode_names = "0.1"
unicode_names_macros = "0.1"



An iterator over the components of a code point's name, it also implements Show.



Find the character called name, or None if no such character exists.


Find the name of c, or None if c has no name.