python3将unicode打印到windows xp控制台编码cp437

2024-09-29 02:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我想在我的WindowsXP控制台中打印一个字符串。 有几个字符的控制台不能打印,所以我必须编码到我的标准输出编码是“cp437”。但打印编码字符串时,“ß”将打印为“\xe1”。在解码回unicode并打印字符串之后,我得到了我想要的输出。但这感觉有点不对。如何正确地打印字符串并获取?对于不可打印字符?在

>>>var
'Bla \u2013 großes'
>>>print(var)
UnicodeEncodeError: 'charmap' codec can't encode character '\u2013'

>>>var.encode('cp437', 'replace')
b'Bla ? gro\xe1es'
>>>print(var.encode('cp437', 'replace'))
b'Bla ? gro\xe1es'

>>>var.encode('cp437', 'replace').decode('cp437')
'Bla ? großes'
>>>print(var.encode('cp437', 'replace').decode('cp437'))
Bla ? großes

编辑: @马克·兰瑟姆:因为我打印了很多,所以我觉得代码很臃肿:/

@eryksun:很抱歉我在找什么。谢谢!在


Tags: 字符串编码esvar字符replaceencodeprint
2条回答

要打印无法使用控制台代码页表示的Unicode字符,可以使用使用Unicode API的^{} Python package直接从Windows控制台读/写Unicode:

#!/usr/bin/env python3
import win_unicode_console

win_unicode_console.enable()
try:
    print('Bla \u2013 großes')
finally:
    win_unicode_console.disable()

将其保存到test_unicode.py文件,然后运行它:

^{pr2}$

你应该看到:

Bla – großes

作为首选方案,您可以使用run模块(包含在软件包中),在Windows控制台中运行一个启用了Unicode支持的普通脚本:

C:\> py -m run unmodified_script_that_prints_unicode.py

要安装win_unicode_console模块,请运行:

C:\> pip install win-unicode-console

请确保选择的字体能够在Windows控制台中显示Unicode字符。在


要将Python脚本的输出保存到文件中,可以使用PYTHONIOENCODINGenvvar:

C:\> set PYTHONIOENCODING=utf-8:backslashreplace
C:\> py unmodified_script_that_prints_unicode.py >output_utf8.txt

不要在脚本中硬编码环境的字符编码,而是打印Unicode。这些示例表明,同一个脚本可以使用不同的编码和不同的方法打印到控制台和文件。在

另一种解决方案是不使用损坏的Windows控制台进行常规unicode输出。Tk文本小部件(作为tkinter文本实例访问)可以处理所有BMP字符,只要所选字体可以。在

既然闲置使用了tkinter,它也可以。运行一个空闲的编辑器文件(调用它py.tem公司)包含

print('Bla \u2013 großes')

在Shell窗口中打印以下内容。在

^{pr2}$

可以使用-m和-r从控制台通过Idle运行文件

C:\>python -m idlelib -r c:/programs/python34/tem.py

这将打开一个shell窗口并打印与上面相同的内容。或者您可以用标签或文本小部件创建自己的tk窗口。在

相关问题 更多 >