读取包含UTF8 xml文件的zip时出现问题

2024-05-18 18:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有包含许多UTF-8xml文件的zip文件。这些文件大多有英文标签和文字,但也有少数标签包含非英文文字。打开zip文件并解析其中的xml文件没有问题,但是非英语文本会丢失它的编码。在

在记事本++中提取并打开xml文件时,非英语文本如下所示:

Курс карбованца к доллару не изменился на Украинской Межбанковской Валютной Бирже (УМВБ) - 176.100.

在Python中(在linux机器上)提取并读取时,文本如下所示:

^{pr2}$

我的代码看起来像:

def parse(self, fp):
    # open/decompress zip file
    with zipfile.ZipFile(fp, 'r') as f:
        # get all files in zip
        comp_files = f.namelist()
        for comp_file in comp_files:
            cfp = f.open(comp_file, 'r')
            # parse xml
            tree = ElementTree.parse(cfp)
            ...parsing...

已经尝试过用cfi对文本进行编码codecs.EncodedFile()输入编码utf_8和utf_8_sig,无变化。我能做些什么来修正非英语文本?在


Tags: 文件in文本编码parsefiles标签xml
1条回答
网友
1楼 · 发布于 2024-05-18 18:22:22

您看到的结果是UTF-8被错误地解码为拉丁语-1/iso-8859-1:

>>> x=u'Курс карбованца к доллару не изменился на Украинской Межбанковской Валютной Бирже (УМВБ) - 176.100.'
>>> print x.encode('utf8').decode('latin1')
ÐÑÑÑ ÐºÐ°ÑбованÑа к доллаÑÑ Ð½Ðµ изменилÑÑ Ð½Ð° УкÑаинÑкой ÐежбанковÑкой ÐалÑÑной ÐиÑже (УÐÐÐ) - 176.100.

我将以下通过记事本++编码的文本保存为一个单独的文件,编码为UTF-8,不带BOM-zipfile:

^{pr2}$

修改代码以使其可运行:

from xml.etree import ElementTree
import zipfile

def parse(fp):
    # open/decompress zip file
    with zipfile.ZipFile(fp, 'r') as f:
        # get all files in zip
        comp_files = f.namelist()
        for comp_file in comp_files:
            cfp = f.open(comp_file, 'r')
            # parse xml
            tree = ElementTree.parse(cfp)
            print tree.getroot().text
            print type(tree.getroot().text)

parse(open('file.zip'))

结果是:

Курс карбованца к доллару не изменился на Украинской Межбанковской Валютной Бирже (УМВБ) - 176.100.
<type 'unicode'>

所以在我看来,它只是在Linux机器上显示不正确,但是如果没有您正在使用的文件的实际示例,就很难进一步分析。在

相关问题 更多 >

    热门问题