【问题标题】:Python: Emit some Utf-8 string to windows console [duplicate]Python:向Windows控制台发出一些Utf-8字符串[重复]
【发布时间】:2012-05-06 11:43:44
【问题描述】:

可能重复:
Python, Unicode, and the Windows console

我从文件中读取了一些字符串,当我尝试在 Windows 控制台中打印这些 utf-8 字符串时,出现错误

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)

我尝试使用 "chcp 65001" 将控制台编码设置为 utf-8 但比我收到此错误消息

LookupError: unknown encoding: cp65001

【问题讨论】:

  • 在 Python 3.3 中修复。
  • python 2.7 有一些解决方法吗?
  • 这个问题已经出现过几次了。这是一个可能有效也可能无效的解决方法的示例:stackoverflow.com/questions/5419/…
  • Daira Hopwood 在 878972 上的回答就是答案。在 2.7 上它是 wontfix (因为它似乎比将它向后移植到 3.1 更大的 PITA),在 3.3 中它是 添加的 但它仍然是错误的,即使在 3.5,由于微软的陌生,它取决于当前字体,而不仅仅是chcp 65001。顺便提一句。相关的环境变量设置为SET PYTHONIOENCODING=utf-8(您也可以尝试mbcs),但两者都不起作用,因为cp65001有问题,而winapi有问题(我不确定'mbcs'应该做什么,但它不会有帮助)。

标签: python encoding windows-console


【解决方案1】:

我建议你在stackoverflow上查看类似的问题,有很多。

无论如何,你可以这样做:

  1. 以任何编码(例如 utf8)从文件中读取,但解码字符串为 unicode
  2. 对于 Windows 控制台,输出 unicode 字符串。在这种特殊情况下,您不需要编码。您无需设置控制台编码,输出文本将自动正确编码。

对于文件,您需要使用编解码器模块或以适当的编码进行编码。

【讨论】:

  • 很好的建议,但应该注意的是,如果您期望控制台上支持多语言,这将不会提供。
  • 这对你真的有用吗?甚至在我从文件中读取第一个字节之前,我就得到了LookupError: unknown encoding: cp65001。它似乎与字符串内容完全无关。就好像 Python 缺乏对 cp65001 的理解,但仍然尝试那样做,除非你解决它或使用 python 3.3,否则这永远不会奏效,如果我不得不猜测的话。
  • @naxa 是的,python 不理解 cp65001。不要 chcp 到 65001。或者至少在调用 python 之前使用set PYTHONIOENCODING=utf-8。另见stackoverflow.com/questions/878972/…
  • 谢谢,我同时找到了,基本思路是使用python 3.3+,预计它仍然是错误的,在2.7上它不会修复,并将你的字体设置为“DejaVu Sans Mono”或在控制台中等效。 :)
【解决方案2】:

打印命令尝试将 Unicode 字符串转换为控制台支持的编码。试试:

>>> import sys
>>> sys.stdout.encoding
'cp852'

它向您展示了控制台支持的编码(告诉 Python 支持什么)。如果字符无法转换为该编码,则无法正确显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-26
    • 2010-12-12
    • 2010-09-08
    • 1970-01-01
    • 2018-06-18
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多