Skip to content
Displayed width of Unicode characters and strings according to UAX#11 rules.
Rust Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Determine displayed width of char and str types according to Unicode Standard Annex #11 rules.

Build Status


extern crate unicode_width;

use unicode_width::UnicodeWidthStr;

fn main() {
    let teststr = "Hello, world!";
    let width = UnicodeWidthStr::width(teststr);
    println!("{}", teststr);
    println!("The above string is {} columns wide.", width);
    let width = teststr.width_cjk();
    println!("The above string is {} columns wide (CJK).", width);

NOTE: The computed width values may not match the actual rendered column width. For example, the woman scientist emoji comprises of a woman emoji, a zero-width joiner and a microscope emoji.

extern crate unicode_width;
use unicode_width::UnicodeWidthStr;

fn main() {
    assert_eq!(UnicodeWidthStr::width("👩"), 2); // Woman
    assert_eq!(UnicodeWidthStr::width("🔬"), 2); // Microscope
    assert_eq!(UnicodeWidthStr::width("👩‍🔬"), 4); // Woman scientist

See Unicode Standard Annex #11 for precise details on what is and isn't covered by this crate.


unicode-width does not depend on libstd, so it can be used in crates with the #![no_std] attribute.

You can use this package in your project by adding the following to your Cargo.toml:

unicode-width = "0.1.5"
You can’t perform that action at this time.