【发布时间】:2013-03-09 23:10:46
【问题描述】:
我花了几个小时寻找 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)
【问题讨论】:
-
我的问题不是关于问题的解决方案,而是关于它的原因。我知道如何解决它,而且我知道它在 Python 3.0 中不存在。你问什么无关紧要。