我正在使用以下代码解析xml文件:
import lxml
file_name = input('Enter the file name, including .xml extension: ')
print('Parsing ' + file_name)
from lxml import etree
parser = lxml.etree.XMLParser()
tree = lxml.etree.parse(file_name, parser)
root = tree.getroot()
nsmap = {'xmlns': 'urn:tva:metadata:2010'}
with open(file_name+'.log', 'w', encoding='utf-8') as f:
for info in root.xpath('//xmlns:ProgramInformation', namespaces=nsmap):
crid = (info.get('programId'))
titlex = (info.find('.//xmlns:Title', namespaces=nsmap))
title = (titlex.text if titlex != None else 'Missing')
synopsis1x = (info.find('.//xmlns:Synopsis[1]', namespaces=nsmap))
synopsis1 = (synopsis1x.text if synopsis1x != None else 'Missing')
synopsis1 = synopsis1.replace('\r','').replace('\n','')
f.write('{}|{}|{}\n'.format(crid, title, synopsis1))
让我们举一个'Přešitébydlení'的标题。如果我在解析文件时打印标题,它会按预期出现。然而,当我把它写出来时,它显示为'PÅ™eÅ¡itébydlenÃ'。
据我所知,这与编码有关(因为我能够将打印命令更改为使用UTF-8,并且'损坏'输出),但我无法按照我的要求将打印输出打印出来。我看了一下编解码器库,但是没有成功。在XML Parser系列中使用'encoding =“utf-8”'没有任何区别。
如何将书面输出配置为人类可读?
答案 0 :(得分:2)
我以前遇到过各种各样的麻烦。但解决方案相当简单。有一章介绍了如何在documentation中读取和写入unicode文件。这个Python talk对于理解这个问题也很有启发性。 Unicode可能很痛苦。如果你开始使用python 3,它会变得容易得多。
import codecs
f = codecs.open('test', encoding='utf-8', mode='w+')
f.write(u'\u4500 blah blah blah\n')
f.seek(0)
print repr(f.readline()[:1])
f.close()
答案 1 :(得分:0)
你的代码看起来不错,所以我认为你的输入是duff。假设您正在使用UTF-8查看器或shell查看输出文件,那么我怀疑<?xml
中的编码与实际编码不匹配。
这可以解释为什么打印有效但不能写入文件。如果您的shell / IDE设置为“ISO-8859-2”并且您的输入XML也是“ISO-8859-2”,那么打印正在推出原始编码。