假设我有一个在标签名称中使用 Unicode 的文档,例如<año>2012</año>
.
当我使用 lxml 中的 etree 来解析这样的文档时,我没有问题,树是正确构建的。但是当(出于调试目的)我尝试打印一些元素时,我得到一个关于尝试将一些 unicode char 编码为 ASCII 失败的异常。
不是终端配置或文件编码错误的问题,因为我可以毫无问题地打印.tag
包含相同 unicode 字符的节点 ( ) 的名称。显然问题是由 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>
吗?
这是一个已知问题吗?关于解决方法的任何想法?