Python打印无法与编解码器一起使用

时间:2018-07-14 16:23:45

标签: python unicode stdout codec

在我的控制台中打印维基百科上的内容时,我一直遇到unicode错误。我找到了一个解决方案(当尝试使用诸如Ł之类的奇怪字符时,不会使控制台崩溃),该解决方案将其放在主文件的顶部:

sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)

现在问题是我的控制台什么也不打印。只有当我取消中途运行的代码时,它才会告诉我它正在打印什么。它曾经实时更新(在我放入上面的代码片段之前),因为它从Wikipedia中提取了信息。任何人都可以解释如何解决此问题或替代解决方案。

为了澄清:如果没有以上代码片段,我将收到的错误是:

UnicodeEncodeError: 'charmap' codec can't encode character '\u0141' in position 6: character maps to <undefined>

现在有了代码片段,它不会实时打印任何内容,但是可以防止该错误。程序最终完成后,它将立即全部打印出所有内容-但我希望它能按需打印(就像以前一样)。我正在使用Python 3.6.5

1 个答案:

答案 0 :(得分:1)

sys.stdout是一个缓冲的流,也就是说,输出被存储在该流中,直到缓冲区被清空后才输出。

print函数将自动刷新其输出流,但是如果直接写入流(例如sys.stdout.write('foo')),则需要显式调用其flush()来发送输出到控制台。

如果在执行程序时未刷新sys.stdout,则如问题所述,它将在程序终止时自动刷新。