我花了几个小时来寻找 Unicode 字符串的问题,这些字符串被分解为 Python (2.7) 对我隐藏的东西,但我仍然不明白。首先,我尝试u".."
在我的代码中始终如一地使用字符串,但这导致了臭名昭著的UnicodeEncodeError
. 我尝试使用.encode('utf8')
,但这也无济于事。最后,事实证明我不应该使用任何一个,这一切都会自动进行。然而,我(在这里我需要感谢一位帮助我的朋友)在我的头撞到墙上时确实注意到了一些奇怪的事情。sys.getdefaultencoding()
返回ascii,同时sys.stdout.encoding
返回UTF-8。sys
1.在下面的代码中可以正常工作,无需对和 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)