python "print"在 sys.setdefaultencoding ('utf-8' 之后不起作用)

标签 python printing

<分区>

Possible Duplicate:
How to display utf-8 in windows console

python“打印”语句不起作用。

为了避免这个错误,

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

我在我的代码中添加了一些语句,如下所示

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

在代码之前,“打印”效果很好。但是,在代码之后,“打印”不起作用。

print "A"

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

print "B"

这里,我的电脑上只打印了“A”,Python2.7.3 (64bit) for Windows。 Python2.7 空闲

我需要帮助

最佳答案

sys.setdefaultencoding 已被 site 删除,您不应使用 reload(sys) 来恢复它。相反,我的解决方案是什么都不做,Python 会自动检测基于 ENV LANG 变量或 Windows chcp 编码的编码。

$ python
Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> sys.stdout.encoding
'UTF-8'
>>> os.environ["LANG"]
'pl_PL.UTF-8'
>>> print u"\xabtest\xbb"
«test»
>>>

但是当编码没有你想要的字符时,这可能会导致问题。您应该改为尝试优雅地降级 - 显示您想要的字符的机会接近于 0(因此您应该尝试使用纯 ASCII 版本,或使用 Unidecode 来显示可用的输出(或干脆失败))。您可以 try catch 异常并打印字符串的基本版本。

$ LANG=C python
Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> sys.stdout.encoding
'ANSI_X3.4-1968'
>>> os.environ["LANG"]
'C'
>>> print u"\xabtest\xbb"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xab' in position 0: ordinal not in range(128)
>>>

但是有一个叫做 Windows 的问题,它对 Unicode 支持有问题。虽然从技术上讲 chcp 65001 应该可以工作,但它实际上不起作用,除非您使用的是 Python 3.3。 Python 使用可移植的 stdio.h,但 cmd.exe 需要 Windows 特定调用,例如 WriteConsoleW()。只有 8 位编码才能可靠地工作(例如 CP437),真的。

解决方法是使用其他正确支持 Unicode 的终端,例如 Cygwin 的控制台或 Python 附带的 IDLE。

关于python "print"在 sys.setdefaultencoding ('utf-8' 之后不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13438299/

相关文章:

python - 如何在 Windows 7 上安装适用于 Python 3.5 或 3.3 的 pyodbc

python - 如何比较两个列表列表之间的对应位置

c# - 打开标准 "Find Network Printer"对话框

java - 如何从sql数据库获取没有小时、分钟和秒的日期(只有yyyy-MM-dd)?

delphi - 快速报告是否支持在复合报告中混合纵向和横向?

python - Azure 上使用 SQLAlchemy 的 MSSQL "connection reset by peer"

python - 使用 Pandas 合并数据框

python - 从Python中的列表列表中提取列表模式

java - 显示随机值

javascript - 捕获(不同)打印/取消打印按钮事件(单击)