pi30の要素から属性値Body
を抽出しようとしています。UnicodeEncodeError: 'ascii'コーデックでu ' u03c0'文字をエンコードできません
cat pi.xml
<?xml version="1.0" encoding="utf-8"?>
<posts>
<row Id="19" Body=" The value of π, the value of pi." />
</posts>
のpythonファイル、pi.py:
from lxml import etree
doc = etree.parse('pi.xml')
r = doc.findall('row')
for i in r:
print (i.get('Body'))
そしてロケール:
$ locale:
LANG=en_IN
LANGUAGE=en_IN:en
LC_CTYPE="en_IN"
LC_NUMERIC="en_IN"
LC_TIME="en_IN"
LC_COLLATE="en_IN"
LC_ALL=
python pi.py
ほどpi.py
を実行すると、すべてが正常です。
しかし、私は出力をリダイレクトし、python pi.py >> pi.txt
としてpi.pyを実行しようとした場合 - 私は、エラーメッセージを取得 - UnicodeEncodeErrorを:(ない範囲で、序:「ASCII」コーデックが文字をエンコードすることはできませんuが位置101で「u03c0を\します」 128)
print (i.get('Body'))
をprint (i.get('Body')).encode('utf-8')
に変更すると、python pi.py >> pi.txt
が正常に動作します。しかし、これは正しい方法ですか?
オペレーティングシステム - Ubuntuの。
てみてください: '$ PYTHONIOENCODING = UTF8のpython pi.py >> py.txt'。 –
Mark、ありがとう!しかし、どこでもうまくいくソリューションはありません。私は他のファイルにこの '$ PYTHONIOENCODING = UTF8のpython somefile.py >> somefile.txt'を使用する場合には、(同じUnicodeEncodeErrorをがスローされます)が動作しませんでした。私が解決策を見つけようとしたら、ここに投稿します。 – abT
ファイルが明示的に出力をエンコードする場合、このメソッドは機能しません。スクリプトはUnicodeを出力し、端末にエンコーディングを決定させるだけでよい。 –