Python, Unicode, and the Windows console Python has great support for Unicode, which allows you to work with text in different languages and character sets. However, when it comes to working with Unicode in the Windows console, there are a few things you

21 浏览
0 Comments

Python, Unicode, and the Windows console Python has great support for Unicode, which allows you to work with text in different languages and character sets. However, when it comes to working with Unicode in the Windows console, there are a few things you

当我尝试在Windows控制台中打印字符串时,有时会出现错误信息UnicodeEncodeError: \'charmap\' codec can\'t encode character ....。我猜测这是因为Windows控制台无法处理所有Unicode字符。\n我应该如何解决这个问题?例如,如何使程序在失败时显示替代字符(如?)?

0
0 Comments

Python、Unicode和Windows控制台的问题的出现原因是Python在Windows上打印Unicode字符串到控制台时存在问题。解决方法是升级到Python 3.6或更高版本,这样就可以正常地将Unicode字符串打印到控制台上。

如果仍然需要支持早期版本的Python(包括Python 2.7),可以使用基于之前链接的答案中的代码的win-unicode-console Python包。此外,还提到了一种使用py -mrun your_script.py命令来避免修改脚本的方法,该方法是基于win-unicode-console包的代码实现的。

需要注意的是,虽然有一些看似合理的答案建议将代码页更改为65001,但在Python 3.8之前并不能正常工作。而且,使用sys.setdefaultencoding来更改默认编码也不是一个好主意。

总结起来,解决Python、Unicode和Windows控制台的问题的方法有以下几点:

1. 升级到Python 3.6或更高版本。

2. 如果需要支持早期版本的Python,可以使用win-unicode-console Python包或py -mrun your_script.py命令。

3. 避免将代码页更改为65001,以及使用sys.setdefaultencoding来更改默认编码。

需要注意的是,在Python 3.7之前的所有版本(包括Python 2.7)已经没有安全支持了,因此建议升级到最新版本的Python。

0
0 Comments

Python、Unicode和Windows控制台的问题源自于控制台的编码不支持Unicode字符。解决方法是将sys.stdout重新包装为一个支持Unicode的编码器。以下是一个解决方案的示例代码:

import sys, codecs, locale
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
line = u"\u0411\n"
sys.stdout.write(line)

请注意,这个解决方案可能已经过时,且不一定适用于所有情况。在使用时请谨慎。另外,该解决方案可能无法解决Windows控制台中的编码错误和乱码问题。

更多关于该问题的信息可以在Python Wiki的PrintFails页面上找到。

0
0 Comments

Python, Unicode, and the Windows console

在使用Python编程时,有时会遇到在Windows控制台中打印Unicode字符时出现错误的情况。错误信息为"UnicodeEncodeError: 'charmap' codec can't encode character..."。这是由于当前的控制台字符编码(chcp)无法表示要打印的Unicode字符。控制台字符编码通常使用8位编码,比如cp437,只能表示大约0x100个Unicode字符中的一部分。

然而,Windows控制台是支持Unicode字符的,只要相应的字体被配置正确。可以使用WriteConsoleW() API来打印Unicode字符,具体方法可以参考Hopwood的回答。如果你使用win-unicode-console包,可以在不修改脚本的情况下直接调用该API。

如果在你的情况下,将所有无法编码的字符替换为"?"就足够了,你可以设置PYTHONIOENCODING环境变量来实现。在命令行中运行以下命令即可:

set PYTHONIOENCODING=:replace
python3 -c "print(u'[\N{EURO SIGN}]')"

需要注意的是,在Python 3.6及以上版本中,交互式控制台缓冲区会忽略PYTHONIOENCODING环境变量指定的编码,除非设置PYTHONLEGACYWINDOWSIOENCODING环境变量为非空字符串。

此外,在Windows上的默认控制台现在是支持所有Unicode字符的。但是,你需要正确配置控制台的字体。右键点击控制台窗口的顶部(命令提示符或Python IDLE),选择默认/字体,选择"Lucida console"字体。在IDLE中,无需配置字体,可以直接显示日文和中文字符。

总之,通过以上方法,你可以在Python中正确地处理Unicode字符在Windows控制台中的打印问题。

0