好的,Python的libxml2绑定的文档真的是****
。我的问题:
XML文档存储在Python中的字符串变量中。该字符串是Unicode的实例,其中包含非ASCII字符。我想用libxml2解析它,看起来像这样:
# -*- coding: utf-8 -*-
import libxml2
DOC = u"""<?xml version="1.0" encoding="UTF-8"?>
<data>
<something>Bäääh!</something>
</data>
"""
xml_doc = libxml2.parseDoc(DOC)
有了这个结果:
Traceback (most recent call last):
File "test.py", line 13, in <module>
xml_doc = libxml2.parseDoc(DOC)
File "c:\Python26\lib\site-packages\libxml2.py", line 1237, in parseDoc
ret = libxml2mod.xmlParseDoc(cur)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 46-48:
ordinal not in range(128)
重点是u"..."
声明。如果我用简单的".."
替换它,那么一切都还可以。不幸的是,它在我的设置中不起作用,因为DOC
肯定是一个Unicode实例。
有谁知道如何使用libxml2来解析UTF-8编码的字符串?
答案 0 :(得分:9)
应该是
# -*- coding: utf-8 -*-
import libxml2
DOC = u"""<?xml version="1.0" encoding="UTF-8"?>
<data>
<something>Bäääh!</something>
</data>
""".encode("UTF-8")
xml_doc = libxml2.parseDoc(DOC)
使用.encode(“UTF-8”)来获取带有utf8编码的unicode字符串的二进制表示。
答案 1 :(得分:6)
XML是一种二进制格式,尽管看起来像文本。在XML文件的开头指定编码,以便将XML字节解码为文本。
您应该做的是将str
而不是unicode
传递到您的图书馆:
xml_doc = libxml2.parseDoc(DOC.encode("UTF-8"))
(如果您有兴趣阅读或撰写site.setencoding
字符串并通过unicode
进行自动转换,则locale
可以使用一些技巧。)
编辑: The Unicode article作者:Joel Spolsky是字符串字符与字节,编码等的良好指南。