win_unicode_console
Enable Unicode input and display when running Python from Windows console.
What it is and what it does
win-unicode-console patches Python's standard input/output streams on Windows to handle Unicode correctly. The Windows console has fundamental limitations: sys.stdin, sys.stdout, and sys.stderr cannot natively read or display Unicode characters through normal Python I/O. This package replaces those streams with custom implementations that use Windows API functions (ReadConsoleW and WriteConsoleW) to communicate with the console in UTF-16-LE, then transcodes to UTF-8 for Python's tokenizer. It also installs a custom readline hook to fix interactive input and, on Python 2, monkeypatches raw_input and sys.argv to handle Unicode.
The package is designed as an external patch—a user-level fix rather than something application developers should bundle as a dependency. Once enabled via win_unicode_console.enable(), Unicode characters can be printed and entered normally. However, the package is abandoned (last release 2016-06-25, last commit 2021-01-04) and targets only Python 2.7 and 3.4–3.5, making it unsuitable for modern Python environments.
Use it for:
- Running legacy Python 2 scripts on Windows that need to accept or display Unicode input from the console.
- Interactive Python REPL sessions on Windows where you need to enter or see non-ASCII characters.
- Debugging or testing Python code that processes Unicode on a Windows machine with older Python versions.
- Standalone Windows console applications written in Python 2 that require international character support.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Fixes Unicode input and display in Python when running from the Windows console by replacing standard streams and input handling with WinAPI-based alternatives.
No. The package is abandoned (last release 2016-06-25) and targets only Python 2.7 and 3.4–3.5, all of which are end-of-life. Modern Python has significantly improved Unicode handling on Windows. If you are on a supported Python version, the standard streams should work correctly; if you are on Python 2 or early versions, you should upgrade rather than apply this patch. Install only if you are stuck maintaining legacy code on an unsupported Python version and have no path to upgrade.
Install
win-unicode-console on PyPI
pip
pip install win-unicode-consoleuv
uv add win-unicode-consolepoetry
poetry add win-unicode-consoleInstalling win_unicode_console
Before you install
High install friction: distributed as a .zip archive requiring manual extraction or pip install from archive. Package is abandoned—last release was 2016-06-25, last commit 2021-01-04, and no maintenance activity since. Targets Python 2.7 and Python 3.4–3.5, which are no longer supported.
License in practice
MIT license is permissive and imposes no restrictions on use or redistribution, but the package's abandonment means no legal recourse for issues.
Quickstart
pip install win-unicode-console
import win_unicode_console
win_unicode_console.enable()
print("α") # Unicode now displays correctly
Windows only; Python 2.7 or Python 3.4–3.5 (older Python versions only).
Verify before relying
- Whether the package works with Python versions released after 3.5.
- Whether the WinAPI approach remains effective on modern Windows console implementations.
- Whether the package's fixes are still necessary given Python's improved Unicode handling in recent versions.
Package facts
| License | MIT (permissive) |
| Python support | not specified |
| Install friction | high — source build required |
| Runtime dependencies | none |
| Maintenance | abandoned — 3,702 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 493,187/month — #6,357 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: win_unicode_console-0.5.zip
Keywords: Windows, Unicode, console
Tags
More Utilities packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
charset-normalizerDetects and normalizes text encoding from…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
PygmentsPygments is a syntax highlighter that colorizes…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
python-yakhCaptures individual keypresses from terminal…
permissive · top 15,000 on PyPI
hexdumpConverts binary data to hexadecimal text…
permissive · top 15,000 on PyPI
unicodecsvDrop-in replacement for Python 2.7's csv module…
permissive · top 5,000 on PyPI
mbstrdecoderDecodes multi-byte character strings by…
permissive · top 5,000 on PyPI
coloramaColorama makes ANSI escape sequences for…
permissive · top 100 on PyPI
subprocess-multiteeMultiplexes subprocess stdout/stderr to…
unclear · top 15,000 on PyPI
cwcwidthcwcwidth provides fast Python bindings for…
permissive · top 15,000 on PyPI
winrt-Windows.Storage.StreamsProvides Python bindings to Windows Runtime…
permissive · top 15,000 on PyPI
python-bidiConverts bidirectional text (mixed…
copyleft · top 5,000 on PyPI
cli-exit-toolsHandles proper exit procedures for CLI…
permissive · top 5,000 on PyPI