1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- """
- Unopinionated display configuration.
- """
- from __future__ import annotations
- import locale
- import sys
- from pandas._config import config as cf
- # -----------------------------------------------------------------------------
- # Global formatting options
- _initial_defencoding: str | None = None
- def detect_console_encoding() -> str:
- """
- Try to find the most capable encoding supported by the console.
- slightly modified from the way IPython handles the same issue.
- """
- global _initial_defencoding
- encoding = None
- try:
- encoding = sys.stdout.encoding or sys.stdin.encoding
- except (AttributeError, OSError):
- pass
- # try again for something better
- if not encoding or "ascii" in encoding.lower():
- try:
- encoding = locale.getpreferredencoding()
- except locale.Error:
- # can be raised by locale.setlocale(), which is
- # called by getpreferredencoding
- # (on some systems, see stdlib locale docs)
- pass
- # when all else fails. this will usually be "ascii"
- if not encoding or "ascii" in encoding.lower():
- encoding = sys.getdefaultencoding()
- # GH#3360, save the reported defencoding at import time
- # MPL backends may change it. Make available for debugging.
- if not _initial_defencoding:
- _initial_defencoding = sys.getdefaultencoding()
- return encoding
- pc_encoding_doc = """
- : str/unicode
- Defaults to the detected encoding of the console.
- Specifies the encoding to be used for strings returned by to_string,
- these are generally strings meant to be displayed on the console.
- """
- with cf.config_prefix("display"):
- cf.register_option(
- "encoding", detect_console_encoding(), pc_encoding_doc, validator=cf.is_text
- )
|