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
提示符下).
设置:
- 设置 Beta:使用 Unicode UTF-8 获得全球语言支持 in Administrative language settings:
附录:你遇到了一个mojibake案例;例如,由于以下 mojibake 机制,Вызов
(您示例中的第一个单词)显示为 ┬√чют
:
>>> 'Вызов'.encode('cp1251').decode('cp866') == '┬√чют'
True
>>> 'Вызов' == '┬√чют'.encode('cp866').decode('cp1251')
True
我有这个功能:
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
提示符下).
设置:
- 设置 Beta:使用 Unicode UTF-8 获得全球语言支持 in Administrative language settings:
附录:你遇到了一个mojibake案例;例如,由于以下 mojibake 机制,Вызов
(您示例中的第一个单词)显示为 ┬√чют
:
>>> 'Вызов'.encode('cp1251').decode('cp866') == '┬√чют'
True
>>> 'Вызов' == '┬√чют'.encode('cp866').decode('cp1251')
True