微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

好的,我想打印一个string在我的Windows XP控制台。 控制台不能打印几个字符,所以我必须编码到我的stdout.encoding这是'cp437'。 但打印编码的string,“ß”打印为“ xe1”。 解码回unicode并打印string后,我得到我想要的输出。 但是这感觉有些不妥。 如何正确的方式来打印一个string,并得到? 对于不可打印的字符?

>>>var 'Bla u2013 großes' >>>print(var) UnicodeEncodeError: 'charmap' codec can't encode character 'u2013' >>>var.encode('cp437','replace') b'Bla ? groxe1es' >>>print(var.encode('cp437','replace')) b'Bla ? groxe1es' >>>var.encode('cp437','replace').decode('cp437') 'Bla ? großes' >>>print(var.encode('cp437','replace').decode('cp437')) Bla ? großes

编辑:@Mark Ransom:因为我打印了很多,这使得代码非常臃肿,我觉得:/

@eryksun:excactly我在找什么。 非常感谢!

你如何打印XPS文件

用户按下打印时运行脚本,而不是在脚本结束之前启动假脱机(linux,cups)

用PrintTicket,OutputColor打印XPS PagesPerSheet不起作用

在Python中使用cat命令进行打印

如何在Windows XP,2003,7,2008下以编程方式添加其他打印机驱动程序(x86 / x64)

静静地使用Microsoft XPS Document Writer打印机来创buildXPS

Linux / CUPS打印示例/教程?

通过Get-WmiObject设置认打印机时出错:调用SetDefaultPrinter的exception:不支持

CUPS发送多个作业到IPP打印机

Windows后台打印程序事件API不会生成networking打印机的事件

要打印使用控制台代码页无法表示的Unicode字符,可以使用使用Unicode API(例如ReadConsoleW/WriteConsoleW() win-unicode-console Python包直接从/向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文件,并运行它:

C:> py test_unicode.py

你应该看到:

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脚本的输出保存到文件中,可以使用PYTHONIOENCODING envvar:

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

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

另一种解决方案是不使用残缺的Windows控制台来处理一般的unicode输出。 Tk文本小部件(作为tkinter文本实例访问)只要选定字体将处理所有BMP字符。

由于空闲使用tkinter,它也可以。 运行一个空闲的编辑器文件(称为tem.py)包含

print('Bla u2013 großes')

在Shell窗口中打印以下内容

Bla – großes

一个文件可以通过-m和-r从控制台空闲运行。

C:>python -m idlelib -rc:/programs/python34/tem.py

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐