This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: print unicode in Windows console
Type: behavior Stage:
Components: Windows Versions: Python 3.3
process
Status: closed Resolution: duplicate
Dependencies: Superseder: windows console doesn't print or input Unicode
View: 1602
Assigned To: Nosy List: LeslieK, terry.reedy, vstinner
Priority: normal Keywords:

Created on 2014-04-07 02:57 by LeslieK, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (4)
msg215675 - (view) Author: Leslie Klein (LeslieK) Date: 2014-04-07 02:57
The console behaves by encoding a str (using the sys.getdefaultencoding()) and then decodes the bytes to a glyph for rendering. The decoder used is 'cp437'. Apparently, there is no way to override that!

See ipython notebook for summary and example of the issue.

nbviewer.ipython.org/gist/LeslieK/10013426
msg215693 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2014-04-07 11:08
Hi, when you say "The console" is the the old MS-DOS command ("Windows console") opened when you run the "cmd.exe" program? Or IDLE or another console?

For the Windows console, see the old issue #1602 which is not fixed yet.

On Windows, sys.stdout.encoding is your OEM code page, which is usually different than the ANSI code page (locale.getpreferredencoding()).
msg215937 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2014-04-11 17:43
You can change the code page of a Command Prompt window, before calling Python, with ...> chcp <code-page>. There is 'something' called cp65001 that is supposed to be a utf-8 codepage. Once can change to it, but it does not work right. This has been discussed on StackOverflow and elsewhere.

The Idle Shell, running on tkinter, handles everything in the BMP because tcl/tk is unicode (ucs-2) based. The characters that display properly depend on the font you select. On my machine, all but three of the following arbitrary codepoints display proper characters.
>>> print('\u1111\u2222\u3333\u4444\u5555\u6666\u7777\u8888\u9999\uaaaa\ubbbb\ucccc\udddd\ueeee')
ᄑ∢㌳䑄啕晦睷袈香ꪪ뮻쳌�
msg215945 - (view) Author: Leslie Klein (LeslieK) Date: 2014-04-11 18:51
I start ipython in Windows PowerShell. The "console" I am referring to is
ipython running in WindowsPowerShell.
I do not use the DOS cmd.exe

When running ipython notebook from WindowsPowerShell -- no problem printing
unicode.

When running in PTVS (Python Tools for Visual Studio) debugger -- no
problem printing unicode in Output window, or Interactive Python window.
Problem does appear in Console window (which is the DOS window I believe).

On Mon, Apr 7, 2014 at 7:08 AM, STINNER Victor <report@bugs.python.org>wrote:

>
> STINNER Victor added the comment:
>
> Hi, when you say "The console" is the the old MS-DOS command ("Windows
> console") opened when you run the "cmd.exe" program? Or IDLE or another
> console?
>
> For the Windows console, see the old issue #1602 which is not fixed yet.
>
> On Windows, sys.stdout.encoding is your OEM code page, which is usually
> different than the ANSI code page (locale.getpreferredencoding()).
>
> ----------
> nosy: +haypo
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <http://bugs.python.org/issue21164>
> _______________________________________
>
History
Date User Action Args
2022-04-11 14:58:01adminsetgithub: 65363
2014-04-11 18:51:09LeslieKsetmessages: + msg215945
2014-04-11 17:43:23terry.reedysetstatus: open -> closed

nosy: + terry.reedy
messages: + msg215937

superseder: windows console doesn't print or input Unicode
resolution: duplicate
2014-04-07 11:08:40vstinnersetnosy: + vstinner
messages: + msg215693
2014-04-07 02:57:52LeslieKcreate