【问题标题】:python xml.dom.minidom.parse and utf-8 xml file with cyrillicpython xml.dom.minidom.parse 和带有西里尔字母的 utf-8 xml 文件
【发布时间】:2011-04-09 18:52:58
【问题描述】:

对不起我的英语:)

我在解析 utf-8 中包含西里尔文文本的 xml 文件时遇到问题

xml 中的一些行:

............

<programme start="20110405022000 +0300"
stop="20110405031000 +0300" channel="4000"> <title
lang="bul">Модерно</title> <sub-title
lang="bul"></sub-title> <desc
lang="bul">Тоук шоу. Модерно е токшоу
с водещ и продуцент Радост Драганова.
Предаването разисква всички теми,
които интересуват жените, като им
помага да изглеждат по-добре и да се
чувстват по-добре</desc> <category
lang="bul">0</category> </programme>
<programme start="20110405031000 +0300"
stop="20110405050000 +0300" channel="4000"> <title
lang="bul">Клонинг</title> <sub-title
lang="bul"></sub-title> <desc
lang="bul">Еп. 89 и 90, сериал.
Любовта между Хаде и Лукас се ражда в
Мароко, където двамата се запознават.
Но мюсюлманските обичаи разделят
влюбените. Хаде е родена и израснала в
САЩ, но след смъртта на майка си
заминава за Мароко при чичо си
Али</desc> <category
lang="bul">0</category> </programme>

............

我使用 DOMTree = xml.dom.minidom.parse("text.xml") 并得到一个错误:

Traceback (most recent call last):
  File "t3.py", line 9, in <module>
    DOMTree = parse(datasource)
  File "/usr/lib/python2.6/xml/dom/minidom.py", line 1918, in parse
    return expatbuilder.parse(file)
  File "/usr/lib/python2.6/xml/dom/expatbuilder.py", line 928, in parse
    result = builder.parseFile(file)
  File "/usr/lib/python2.6/xml/dom/expatbuilder.py", line 207, in parseFile
    parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 10, column 18

第 10 行,第 18 列是第一个西里尔符号。 在 xml 文件的第一行是

<?xml version="1.0" encoding="utf-8"?>

有什么想法吗?

【问题讨论】:

    标签: python xml utf-8


    【解决方案1】:

    您的 xml 文件必须格式正确,即它必须只有一个根元素。尝试在输入文件的开头和结尾添加根标签。

    【讨论】:

    • 我做到了。第一行之后是 ,最后是 。如果我将第一行中的编码更改为 koi8-r 它可以工作。但我想使用 utf-8。
    • 我不认为这会给出“无效令牌”错误。
    【解决方案2】:

    你说“”“如果我将第一行的编码更改为 koi8-r,它可以工作。但我想使用 utf-8。”“”

    我想你的意思是如果 XML 文件以

    开头,它就可以工作
    <?xml version="1.0" encoding="KOI8-R" ?>
    

    如果是这样,那么您的文件编码为KOI8-R

    如果您想使用 UTF-8 输入文件,则不应使用 KOI8-R 对文件进行编码,或者应将文件从 KOI8-R 转码为 UTF-8。

    如果“我想使用 utf-8”有其他含义,请解释一下。

    【讨论】:

    • 我的文件是 UTF-8 格式,我正在用另一个 PHP 脚本处理它,它可以工作,但我想迁移到 python。在 PHP 中,我使用从 utf-8 到 ISO8859-5 的 iconv,它工作正常。我更改 xml 标头中的编码类型仅用于测试。
    【解决方案3】:

    我建议使用 chardet。以下代码可能会有所帮助。我有 xml 数据为 GB3212。我使用 chardet 只是将我的源代码转换为 utf-8。我希望这会有所帮助。

    xml_data_type = chardet.detect(xml_data_source)['encoding']

    打印 xml_data_type '''检查你的编码'''

    xml_data = xml_data.decode(xml_data_encoding)

    xml_data = xml.data.encode("utf-8")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 2012-04-01
      • 2018-04-22
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 2015-12-04
      • 2013-04-26
      相关资源
      最近更新 更多