skip to navigation
skip to content

wcwidth 0.1.5

Measures number of Terminal column cells of wide-character codes


This API is mainly for Terminal Emulator implementors, or those writing programs that expect to interpreted by a terminal emulator and wish to determine the printable width of a string on a Terminal.

Usually, the length of the string is equivalent to the number of cells it occupies except that there are are also some categories of characters which occupy 2 or even 0 cells. POSIX-conforming systems provide wcwidth(3) and wcswidth(3) of which this module’s interface mirrors precisely.

This library aims to be forward-looking, portable, and most correct. The most current release of this API is based from Unicode Standard release files:

2015-02-10, 21:00:00 GMT [KW, LI]
2015-02-13, 13:47:11 GMT [MD]


The stable version of this package is maintained on pypi, install using pip:

pip install wcwidth


To Display u'コンニチハ' right-adjusted on screen of 80 columns:

>>> from wcwidth import wcswidth
>>> text = u'コンニチハ'
>>> print(u' ' * (80 - wcswidth(text)) + text)

wcwidth, wcswidth

Use function wcwidth() to determine the length of a single character, and wcswidth() to determine the length of a string of characters.

Function wcswidth() simply returns the sum of all values along a string, individually mapped over function wcwidth(), or, -1 in total if any part of the string’s return value from wcwidth() results in a value of -1.

Return values of wcwidth are:

Indeterminate (not printable).
Does not advance the cursor, such as NULL or Combining.
Characters of category East Asian Wide (W) or East Asian Full-width (F) which are displayed using two terminal cells.
All others.

A more exact list of conditions of these return values may be found in the module docstring:

$ pydoc wcwidth


This library does its best to return the most appropriate return value for a very particular terminal user interface where a monospaced fixed-cell rendering is expected. As the POSIX Terminal programming interface does not provide any means to determine the unicode support level of a connecting terminal, we can only do our best to return what we assume to be correct for the given codepoint, and not the result of any terminal emulator particular.


Execute the command python develop to prepare an environment for running tests (python test), updating tables ( python update) or using any of the scripts in the bin/ sub-folder. These files are only made available in the source repository.

You may determine an exacting list of these discrepancies using the project file

Updating Tables

The command python update will fetch the following resources:

And generates the table files:


This code was originally derived directly from C code of the same name, whose latest version is available at And is authored by Markus Kuhn, 2007-05-26 (Unicode 5.0).


This library is used in:

Additional tools for displaying and testing wcwidth are found in the bin/ folder of this project. They are not distributed as a script or part of the module.


0.1.5 2015-09-13 Alpha
  • Bugfix: Resolution of “combining character width” issue, most especially those that previously returned -1 now often (correctly) return 0. resolved by Philip Craig via PR #11.
  • Deprecated: The module path wcwidth.table_comb is no longer available, it has been superseded by module path wcwidth.table_zero.
0.1.4 2014-11-20 Pre-Alpha
0.1.3 2014-10-29 Pre-Alpha
0.1.2 2014-10-28 Pre-Alpha
0.1.1 2014-05-14 Pre-Alpha
  • Initial release to pypi, Based on Unicode Specification 6.3.0
File Type Py Version Uploaded on Size
wcwidth-0.1.5-py2.py3-none-any.whl (md5) Python Wheel 2.7 2015-09-14 18KB
wcwidth-0.1.5.tar.gz (md5) Source 2015-09-14 19KB
  • Downloads (All Versions):
  • 1372 downloads in the last day
  • 9446 downloads in the last week
  • 41829 downloads in the last month