私はHOWTO on Unicodeを公式の文書と完全で非常に詳細なarticleから読みました。まだ私はそれが私にこのエラーを投げる理由を得ることはありません。UnicodeEncodeError: 'ascii'コーデックは文字をエンコードできません[...]
私が試したのは以下のとおりです。ASCII範囲外のチャンクを含むXMLファイルを開きます(ただし、許可されたXML範囲内です)。私はcfg = codecs.open(filename, encoding='utf-8, mode='r')
でうまく動作します。 repr()
の文字列を見ると、私にユニコードの文字列も表示されます。
私は先に進み、parseString(cfg.read().encode('utf-8')
でそれを読んでください。もちろん、私のXMLファイルは<?xml version="1.0" encoding="utf-8"?>
で始まります。私はそれが関係ないと思うが、私はPythonスクリプトのためにutf-8も定義した。しかし、私はUnicode文字を直接書くのではないので、ここでは適用しないでください。次の行にも同じです:from __future__ import unicode_literals
これも最初のところです。
次のもの私は生成したオブジェクトを自分のクラスに渡します。このクラスでは、タグをこのような変数に読み込んでxmldata.getElementsByTagName(tagName)[0].firstChild.data
という変数に割り当て、それをクラスの変数に割り当てます。
for element in obj:
print element
そして、このコマンドは、同様に動作します:
print obj.__repr__()
を私はすべてのを得__iter__()
を定義し
完全に今、何の作品は(objがクラスのインスタンスである)これらのコマンドです変数__repr__()
は典型的なprintfを使用します:"%s" % self.varname
両方のコマンドが完全に印刷され、彼はユニコードのキャラクターです。 何を動作しませんが、このです:
print obj
そして、これはだから私は何をしないのです恐ろしい
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 47:
をスローしますので、今、私はこだわっていますか?私は間違って何をしていますか?私は一般的な解決策を探しています。私はいつも可能なエラーを避け、互換性のあるプログラムを書くために、文字列をユニコードとして扱いたいと思っています。
編集:私はこの
'print obj'は' __repr__'ではなく、オブジェクトの '__str__'を使用します。 – BrenBarn
デフォルトのエンコーディングは何ですか?私は* sys.getdefaultencoding()* –
@BrenBarn:__str__はreturn __repr __()として実装されています – javex