猿问

Python,Unicode和Windows控制台

Python,Unicode和Windows控制台

当我尝试在Windows控制台中打印Unicode字符串时,出现UnicodeEncodeError: 'charmap' codec can't encode character ....错误。我认为这是因为Windows控制台不接受仅Unicode字符。最好的方法是什么??在这种情况下,有什么方法可以让Python自动打印而不是失败?

编辑: 我正在使用Python 2.5。


喵喵时光机
浏览 843回答 4
4回答

婷婷同学_

注意:这个答案有点过时(从2008年开始)。请小心使用以下解决方案!!这是一个详细说明问题的页面和解决方案(在页面中搜索将sys.stdout包装到实例中的文本):PrintFails - Python Wiki这是该页面的代码摘录:$&nbsp;python&nbsp;-c&nbsp;'import&nbsp;sys,&nbsp;codecs,&nbsp;locale;&nbsp;print&nbsp;sys.stdout.encoding;&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;sys.stdout&nbsp;=&nbsp;codecs.getwriter(locale.getpreferredencoding())(sys.stdout);&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;=&nbsp;u"\u0411\n";&nbsp;print&nbsp;type(line),&nbsp;len(line);&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;sys.stdout.write(line);&nbsp;print&nbsp;line' &nbsp;&nbsp;UTF-8 &nbsp;&nbsp;<type&nbsp;'unicode'>&nbsp;2 &nbsp;&nbsp;Б &nbsp;&nbsp;Б &nbsp;&nbsp;$&nbsp;python&nbsp;-c&nbsp;'import&nbsp;sys,&nbsp;codecs,&nbsp;locale;&nbsp;print&nbsp;sys.stdout.encoding;&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;sys.stdout&nbsp;=&nbsp;codecs.getwriter(locale.getpreferredencoding())(sys.stdout);&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;=&nbsp;u"\u0411\n";&nbsp;print&nbsp;type(line),&nbsp;len(line);&nbsp;\ &nbsp;&nbsp;&nbsp;&nbsp;sys.stdout.write(line);&nbsp;print&nbsp;line'&nbsp;|&nbsp;cat&nbsp;&nbsp;None &nbsp;&nbsp;<type&nbsp;'unicode'>&nbsp;2 &nbsp;&nbsp;Б &nbsp;&nbsp;Б有关该页面的更多信息,非常值得一读。

qq_花开花谢_0

尽管有其他看似合理的答案建议将代码页更改为65001,但这不起作用。(此外,使用更改默认的编码sys.setdefaultencoding是不是一个好主意。)有关详细信息和可行的代码,请参阅此问题。

梵蒂冈之花

如果你对获得可靠的坏字符表示不感兴趣,可以使用类似的东西(使用python> = 2.6,包括3.x):from&nbsp;__future__&nbsp;import&nbsp;print_functionimport&nbsp;sysdef&nbsp;safeprint(s): &nbsp;&nbsp;&nbsp;&nbsp;try: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(s) &nbsp;&nbsp;&nbsp;&nbsp;except&nbsp;UnicodeEncodeError: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;sys.version_info&nbsp;>=&nbsp;(3,): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(s.encode('utf8').decode(sys.stdout.encoding)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(s.encode('utf8'))safeprint(u"\N{EM&nbsp;DASH}")字符串中的错误字符将以Windows控制台可打印的表示形式进行转换。
随时随地看视频慕课网APP

相关分类

Python
我要回答