New submission from Manuel Jacob <m...@manueljacob.de>:

The documentation for the curses module 
(https://docs.python.org/3.9/library/curses.html) has the following note:

> Since version 5.4, the ncurses library decides how to interpret non-ASCII 
> data using the nl_langinfo function. That means that you have to call 
> locale.setlocale() in the application and encode Unicode strings using one of 
> the system’s available encodings. This example uses the system’s default 
> encoding:
> 
> import locale
> locale.setlocale(locale.LC_ALL, '')
> code = locale.getpreferredencoding()
> 
> Then use code as the encoding for str.encode() calls.

The recommendation to call `locale.setlocale(locale.LC_ALL, '')` is problematic 
as it initializes all locale categories to the user settings, which might be 
unintended and is not necessary for curses to work correctly. Initializing 
LC_CTYPE is sufficient for nl_langinfo() to return the correct encoding. 
Current versions of Python (*) initialize LC_CTYPE at interpreter startup. 
Therefore calling locale.setlocale() should not be necessary at all.

The curses module automatically encodes strings. Therefore the recommendation 
to manually encode strings is outdated.

(*) It seems to be the case since 177d921c8c03d30daa32994362023f777624b10d. Why 
was is not previously done on Python 2 and on Python 3 on Windows?

----------
assignee: docs@python
components: Documentation
messages: 372178
nosy: docs@python, mjacob
priority: normal
severity: normal
status: open
title: Remove recommendation in curses module documentation to initialize 
LC_ALL and encode strings

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue41091>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to