如何在Git Bash / WinPTY下使用Python3获取REPL /箭头键功能和Unicode字符

时间:2017-12-04 16:17:36

标签: python unicode windows-console git-for-windows

Windows 7,限制用户帐户正在运行 Git git version 2.14.1.windows.1

MINGW / MSYS MINGW64_NT-6.1 REDACTED 2.8.2(0.313/5/3) 2017-07-12 15:35 x86_64 Msys

Python Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32

语言环境已设置:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=

Python IO编码env变量已设置

$ env | grep "PYTHON"
PYTHONIOENCODING=utf-8

现在进行'测试':

$ /c/Python34/python.exe -i
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.encoding
'utf-8'
>>> print('\u2660')
♠
>>>

Unicode有效但箭头键功能已在REPL中丢失。所以相反,使用WinPTY执行

$ winpty /c/Python34/python.exe -i
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.encoding
'utf-8'
>>> print('\u2660')
ΓÖá
>>>

现在我可以在REPL中浏览历史记录,但Unicode很不稳定。

所以看起来我可以使用REPL中的箭头键或正确的unicode编码,但不能同时使用两者。其他人都有这个问题,或者我在这里错过了一些可以使这一切工作的东西?

注意:我受限于此环境;我无法随意安装/更新/修改应用程序。

1 个答案:

答案 0 :(得分:1)

在WinPTY案例中,控制台仍在使用cp437(默认的美国OEM Windows编码),但您强制Python通过PYTHONIOENCODING输出UTF-8。切换到Python 3.6,因为该版本现在使用Windows Unicode控制台API输出Unicode,不应该有编码问题。