私は、Python(2.7)が私から隠しているものに分解された、Unicode文字列の問題を探すために数時間怒って過ごしましたが、それでも理解できません。最初にu".."
、コードで一貫して文字列を使用しようとしましたが、その結果、悪名高いUnicodeEncodeError
。を使ってみ.encode('utf8')
ましたが、それも役に立ちませんでした。最後に、私も使用すべきではないことが判明し、すべてが自動的に機能します。しかし、私(ここでは私を助けてくれた友人にクレジットを与える必要があります)は、壁に頭をぶつけているときに何か奇妙なことに気づきました。asciiをsys.getdefaultencoding()
返し、 UTF-8を返します。1.以下のコードでは、変更を加えなくても正常に動作します。2.を発生させます。デフォルトのシステムエンコーディングをで変更した場合 sys.stdout.encoding
sys
UnicodeEncodeError
reload(sys).setdefaultencoding("utf8")
、次に2.正常に動作します。私の質問は、そもそも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)