如何在 Git Bash/WinPTY 下获得 REPL/arrow 关键功能和使用 Python3 的 Unicode 字符

How to get both REPL/arrow key functionality and Unicode characters working with Python3 under Git Bash/WinPTY

Windows7、受限用户帐号运行 Gitgit 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

现在 'tests':

$ /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 编码,但不能同时使用两者。其他人有这个问题还是我在这里遗漏了一些可以使这一切正常工作的东西?

注:我受限于此环境;我不能随意 install/update/modify 应用程序。

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