たとえば、タグ名にUnicodeを使用するドキュメントがあるとします<año>2012</año>
。
lxmlのetreeを使用してそのようなドキュメントを解析すると、問題はなく、ツリーは正しく構築されます。しかし、(デバッグ目的で)いくつかの要素を出力しようとすると、ASCIIとしていくつかのUnicode文字をエンコードしようとして失敗したという例外が発生します。
.tag
同じユニコード文字を含むノード()の名前を問題なく出力できるため、端末構成やファイルのエンコード不良の問題ではありません。どうやらこの問題は、Elementオブジェクトの「文字列化」が原因であるようです。これは、タグ名が単純なASCIIから離れていることを前提としています。
次のコードは問題を示しています(また、ファイル/端末/エンコーディングの問題ではないことも示しています)。
# coding: utf-8
from lxml import etree
doc = """<?xml version="1.0" encoding="utf-8"?>
<año>2012</año>
"""
x = etree.fromstring(doc) # No problem
print x.tag # No problem
print x # Exception
LC_CTYPEが適切に定義された端末で上記のスクリプトを実行すると、次の出力が生成されます。
año
Traceback (most recent call last):
File "procesar.py", line 8, in <module>
print x
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 10: ordinal not in range(128)
print x.tag
どのように正しく出力されるかに注意してくださいaño
。print x
のようなものを生成するべきではありません<Element año at b7d26eb4>
か?
これは既知の問題ですか?回避策について何かアイデアはありますか?