当前位置: 首页 > python > 正文

python解析xml的字符集问题的处理

python版本:2.6

案例一: test.xml
<?xml version=”1.0″ encoding=”utf8″?>
调用:
xmldoc = minidom.parse(test.xml)
报错:
Traceback (most recent call last):
  File “D:\project\src\myapp\src\xml\testdomxml.py”, line 14, in <module>
    xmldoc = minidom.parse(response)
  File “D:\Python\lib\xml\dom\minidom.py”, line 1918, in parse
    return expatbuilder.parse(file)
  File “D:\Python\lib\xml\dom\expatbuilder.py”, line 928, in parse
    result = builder.parseFile(file)
  File “D:\Python\lib\xml\dom\expatbuilder.py”, line 207, in parseFile
    parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: unknown encoding: line 1, column 30

修改后:test2.xml
<?xml version=”1.0″ encoding=”utf-8″?>
再次调用
xmldoc = minidom.parse(test2.xml)
没有问题了。 囧一个!

详细可见python bug 列表: http://bugs.python.org/msg63471

案例二:
xmldoc = minidom.parse(urllib.urlopen(‘http://rss.sina.com.cn/news/marquee/ddt.xml’))
正常调用

xmldoc = minidom.parse(urllib.urlopen(‘http://news.163.com/special/00011K6L/rss_newstop.xml”))
报错:
  File “D:\Python\lib\xml\dom\expatbuilder.py”, line 207, in parseFile
    parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: unknown encoding: line 1, column 30

观察sina和163的两个rss源文件看,并未发现特别的异常,不过将163的保存为文件rssnew163.xml,在其头部添加
<?xml version=”1.0″ encoding=”utf-8″?>
然后再调用
xmldoc = minidom.parse(“rssnew163.xml”)
问题解决,看来还是字符编码的问题了。
对于使用urllib实时更新rss的就需要预先处理一下了,先保存rss文件,然后添加上述行,或者将xml文件转换成utf-8编码即可。

本文固定链接: http://2hei.net/python_xml_encoding_utf8.html | 2hei's site

该日志由 2hei 于2010年05月07日发表在 python 分类下,
原创文章转载请注明: python解析xml的字符集问题的处理 | 2hei's site
关键字: ,

python解析xml的字符集问题的处理:目前有3 条留言

  1. 地板
    kingslee:

    The encoding string included in XML output should conform to the appropriate standards. For example, “UTF-8” is valid, but “UTF8” is not.
    http://docs.python.org/library/xml.dom.minidom.html

    2010-06-25 下午 12:34
  2. 板凳
    kingslee:

    http://docs.python.org/library/xml.dom.minidom.html
    The encoding string included in XML output should conform to the appropriate standards. For example, “UTF-8” is valid, but “UTF8” is not.

    2010-06-25 下午 12:36