Python 3 的帮助函数中的西里尔字母在 Powershell Windows 10 中不起作用

Cyrillic alphabet in help function from Python 3 don't work in Powershell Windows 10

我有这个功能:

def decomposition():
    """
        Вызов модуля oval_decomposition.py для разложения OVAL xml на
        составные части - определения, объекты и т.д.

        Для корректного сбора модулем build необходима следующая секция
        внутри каждого <definition>:
        <oval_repository>
            <dates>
                <submitted date="YYYY-MM-DDTHH:MM:SS.000+00:00">
                    <contributor organization="ORGANISATION">JOHN WICK</contributor>
                </submitted>
            </dates>
        </oval_repository>

    """
    oval_decomposition.main()

这就是我在 Powershell 中得到的,当我使用帮助(分解)时:

┬√чют ьюфєы  oval_decomposition.py фы  Ёрчыюцхэш  OVAL xml эр
ёюёЄртэ√х ўрёЄш - юяЁхфхыхэш , юс·хъЄ√ ш Є.ф.

─ы  ъюЁЁхъЄэюую ёсюЁр ьюфєыхь build эхюсїюфшьр ёыхфє■∙р  ёхъЎш 
тэєЄЁш ърцфюую <definition>:
<oval_repository>
    <dates>
        <submitted date="YYYY-MM-DDTHH:MM:SS.000+00:00">
            <contributor organization="ORGANISATION">JOHN WICK</contributor>
        </submitted>
    </dates>
</oval_repository>

当我在印刷品中使用西里尔字母时,它起作用了。当我在文件开头添加“# coding: utf-8”时,它在 Linux 中也能正常工作。但是,这对 Windows 没有帮助。我也试过这个来改变 Powershell 编码:

PS C:\Users\denis\Documents\dev\OVALRepo> "$OutputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8"
System.Text.UTF8Encoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8

我找不到像在 print 函数中那样手动更改帮助函数编码的方法。

在Windows中严格应用UTF-8 Everywhere后肯定解决了。

尝试使用不同的字母组合(拉丁文、西里尔文和希腊文)如下:type .\testHelp.py

# -*- coding: utf-8 -*-

def foo():
    """
    help in Czech, Greek, Russian
    nápověda česky, řecky, rusky
    βοήθεια στα Τσεχικά, Ελληνικά, Ρωσικά (¹)
    помощь на чешском, греческом, русском языках (¹)
    (¹) from Google Translate
    """
    return ''

help(foo)

Result if 运行 from pure cmd or from PowerShell (version 5.1) or from pwsh (version 7 ):

python .\testHelp.py
Help on function foo in module __main__:

foo()
    help in Czech, Greek, Russian
    nápověda česky, řecky, rusky
    βοήθεια στα Τσεχικά, Ελληνικά, Ρωσικά (¹)
    помощь на чешском, греческом, русском языках (¹)
    (¹) from Google Translate

( Copy&Paste 上面的代码在一个打开的python提示符下).

设置:

附录:你遇到了一个mojibake案例;例如,由于以下 mojibake 机制,Вызов(您示例中的第一个单词)显示为 ┬√чют

>>> 'Вызов'.encode('cp1251').decode('cp866') == '┬√чют'
True
>>> 'Вызов' == '┬√чют'.encode('cp866').decode('cp1251')
True