gpt4 book ai didi

python - 从 cmd.exe 运行时 Python 标准输出中的 Unicode 输出

转载 作者:行者123 更新时间:2023-11-30 21:50:30 25 4
gpt4 key购买 nike

我运行的是 Windows 7,其控制台已配置为使用 Consolas 字体,这使我可以进行 Unicode 输出。在控制台中读取 Unicode 的能力已经被我在 Far Manager 等程序中多次证明:西里尔字母和德语 äöü 字母都可以在同一控制台上以同一字符串读取,无需进行编码切换。

现在谈谈Python。

我很努力,但在输出中看不到 Unicode。默认print(sys.stdout.encoding)打印cp866 stdout 无法输出除 ASCII 和西里尔字母以外的任何字符。

它给了我以下结果:

print("Ля-ля äöüÄÖÜß")

UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-12: character maps to <undefined>

print("Ля-ля äöüÄÖÜß".encode("utf-8"))

b'\xd0\x9b\xd1\x8f-\xd0\xbb\xd1\x8f \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c\xc3\x9f'

好的,我已经设置了PYTHONIOENCODING批处理文件中的环境变量:

SET PYTHONIOENCODING=UTF-8

得到:

print(sys.stdout.encoding)
UTF-8

print("Ля-ля äöüÄÖÜß")
╨Ы╤П-╨╗╤П ├д├╢├╝├Д├Ц├Ь├Я

print("Ля-ля äöüÄÖÜß".encode("utf-8"))`
b'\xd0\x9b\xd1\x8f-\xd0\xbb\xd1\x8f \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c\xc3\x9f'

要做什么?

最佳答案

实际上,Python 和 Windows 控制台之间的交互存在一个 bug(请参阅 http://bugs.python.org/issue1602 )。可以使用 C 函数 ReadConsoleW、WriteConsoleW 而不是 ReadConsole 和 WriteConsole 在 Windows 控制台中读取和写入 Unicode。因此,一种似乎可行的解决方案是编写自己的 stdout 和 stdin 对象,通过 ctypes 调用 ReadConsoleW、WriteConsoleW。对于输出,这是可行的,但对于输入,存在一个问题,Python 交互式解释器实际上不使用 sys.stdin 来获取输入(但调用 input() 函数可以工作) - 请参阅 http://bugs.python.org/issue17620 .

很多人说 Windows 控制台有问题。但您实际上可以毫无问题地输入 Unicode 字符(如果您有正确的键盘布局)。这些都显示没有问题。您甚至可以使用一些 Unicode 参数运行名为“∫.py”的文件,并且它可以正确运行,并且参数正确地等待在 sys.argv 字符串中。

更新:我已经构建了一个Python包来处理这些问题。请参阅https://github.com/Drekin/win-unicode-consolehttps://pypi.python.org/pypi/win_unicode_console 。通过pip install win_unicode_console安装。它至少对我来说在 Python 3.4、Python 3.5 和 Python 2.7 上有效。

关于python - 从 cmd.exe 运行时 Python 标准输出中的 Unicode 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17899915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com