当我尝试在Windows控制台中打印Unicode字符串时,出现UnicodeEncodeError: 'charmap' codec can't encode character ....
错误.我认为这是因为Windows控制台不接受仅Unicode字符.最好的方法是什么??
在这种情况下,有什么方法可以让Python自动打印而不是失败?
编辑: 我正在使用Python 2.5.
注意: @ LasseV.Karlsen回答带有复选标记有点过时(从2008年开始).请谨慎使用下面的解决方案/答案/建议!!
截至今天(2016年1月6日),@ JFSebastian答案更为相关.
我正在尝试在我的Windows 7机器上安装Anaconda.我经常使用cygwin来完成我的命令行工作,我想从那里管理Anaconda.我已经通过图形安装程序没有任何问题,并检查了必要的框以重置我的python安装的默认路径.我继续检查python的位置,最初我得到了这个......
$ which python
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
从这里python工作得很好......
$ python
Python 2.7.5 (default, Oct 2 2013, 22:34:09)
[GCC 4.8.1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
Run Code Online (Sandbox Code Playgroud)
但我正试图从蟒蛇工作,所以我只需要重新定义我的道路......
$ export PATH=/cygdrive/c/anaconda:$PATH
$ which python
/cygdrive/c/anaconda/python
Run Code Online (Sandbox Code Playgroud)
现在我应该好好去,但是当我尝试进入python时,它只是挂起
$ python
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?详细回报,下面......
$ python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:\anaconda\lib\site.pyc matches C:\anaconda\lib\site.py
import site # precompiled from C:\anaconda\lib\site.pyc
# C:\anaconda\lib\os.pyc matches C:\anaconda\lib\os.py
import os # precompiled from C:\anaconda\lib\os.pyc
import errno # builtin …
Run Code Online (Sandbox Code Playgroud) 我花了几个小时的时间来寻找Unicode字符串的问题,这些字符串被分解为Python(2.7)隐藏的东西,我仍然不明白.首先,我尝试u".."
在我的代码中使用一致的字符串,但这导致臭名昭着UnicodeEncodeError
.我尝试过使用.encode('utf8')
,但这也无济于事.最后,事实证明我不应该使用任何一个,它都可以自动完成.然而,我(这里我需要赞扬一位帮助过我的朋友)确实注意到一些奇怪的事情,同时我的头靠在墙上.sys.getdefaultencoding()
返回ascii,同时sys.stdout.encoding
返回UTF-8.1.在下面的代码中工作正常,没有任何修改sys
和2.提出一个UnicodeEncodeError
.如果我更改默认的系统编码 reload(sys).setdefaultencoding("utf8")
,那么2.工作正常.我的问题是为什么两个编码变量首先是不同的,如何在这段简单的代码中设法使用错误的编码?请不要把我发送到Unicode HOWTO,我已经在很多问题中看到了这一点UnicodeEncodeError
.
# -*- coding: utf-8 -*-
import sys
class Token:
def __init__(self, string, final=False):
self.value = string
self.final = final
def __str__(self):
return self.value
def __repr__(self):
return self.value
print(sys.getdefaultencoding())
print(sys.stdout.encoding)
# 1.
myString = "I need 20 000€."
tok = Token(myString)
print(tok)
reload(sys).setdefaultencoding("utf8")
# 2.
myString = u"I need 20 000€."
tok = Token(myString)
print(tok)
Run Code Online (Sandbox Code Playgroud) 我的老板让我将以下几行(来自这个答案)放入我编写的 Python 3 脚本中:
import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
Run Code Online (Sandbox Code Playgroud)
他说这是为了防止UnicodeEncodeErrors
在非 UTF8 语言环境中打印 Unicode 字符。我想知道这是否真的有必要,以及为什么 Python 不会在没有样板代码的情况下正确处理编码/解码。
使 Python 脚本与不同操作系统语言环境兼容的最 Pythonic 方法是什么?这个样板代码到底做了什么?