Python xml.dom.minidom.parse 和含西里尔字母的 UTF-8 XML 文件

2 投票
3 回答
3175 浏览
提问于 2025-04-16 15:24

抱歉我的英语不好 :)

我在用程序解析一个包含西里尔字母的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"?>

有什么想法吗?

3 个回答

1

我建议使用chardet这个工具。下面的代码可能会对你有帮助。我有一些XML数据是GB3212编码的。我使用chardet简单地把我的数据转换成了utf-8编码。希望这对你有帮助。

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

print xml_data_type '''检查你的编码'''

xml_data = xml_data.decode(xml_data_encoding)

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

1

你的xml文件必须是格式正确的,也就是说,它只能有一个根元素。试着在你的输入文件的开头和结尾加上根标签。

1

你说“如果我把第一行的编码改成koi8-r就能正常工作。但我想用utf-8。”

我猜你的意思是,如果XML文件的开头是这样的话:

<?xml version="1.0" encoding="KOI8-R" ?>

那么你的文件就是用KOI8-R编码的。

如果你想使用UTF-8格式的输入文件,那就不要把文件编码成KOI8-R,或者你需要把文件从KOI8-R转换成UTF-8。

如果“我想用utf-8”还有其他意思,请解释一下。

撰写回答